ASP.NET Post页面及验证视图状态MAC失败问题的正确解决办法

今天做了个首页登陆的页面,是用Request.Form接收参数的
然后又做了个测试页面test.aspx,代码如下:
<body>
    <form id="form1" runat="server" method="post" action="Default.aspx">
    <div>
        <input type="text" runat="server" id="Solution" value="(Local)" />
        <input type="text" runat="server" id="UserName" value="ricky" />
        <input type="text" runat="server" id="Password" value="111" />
        <input type="submit" runat="server" />
    </div>
    </form>
</body>
但是测试的时候发现test页面始终post到他自己
去掉runat标记则可以post到default.aspx,但取不到值
后来在IE里面查看源代码,发现html是这个样子的<form id="form1" method="post" action="test.aspx">
也就是说生成的html里始终是post到自己的
知道问题就好办了
修改代码:
<form id="form1" runat="server" method="post" onsubmit="this.action='Default.aspx'">
一切OK,post到default.aspx了
然后又报错了
验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate
去网上搜了搜,说问题的原因是asp.net的runat='server' 会对ViewStat进行MAC的加密,解决办法基本上就2个:
1:修改当前页面的@page属性,添加enableEventValidation="false" viewStateEncryptionMode="Never"
或者在web.config里添加<pages enableEventValidation="false" viewStateEncryptionMode="Never" />
2:在web.config里指定validationKey和验证算法
<machineKey validation="3DES" validationKey="319B474B1D2B7A87C996B280450BB36506A95AEDF9B51211" decryption="3DES" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A87" />
可是实际试下来发现没用,问题依旧
查了查资料加上实际测试,终于发现了正确的解决办法
修改当前页面的@page属性,添加enableEventValidation="false" enableViewStateMac="false"
或者在web.config里添加<pages enableEventValidation="false" enableViewStateMac="false" />




看清这世界的美丽与残酷



NAILY Soft
Sephil on CNBlogs

 

标签: dotNET
posted @ 2007-10-19 16:41 Sephil 阅读(4807) 评论(10) 编辑 收藏

 回复 引用   
#1楼 2007-10-25 08:59 老樊[未注册用户]
我也遇到了同样的问题.
 回复 引用   
#2楼 2007-10-25 09:00 老樊[未注册用户]
感谢!我也遇到了同样的问题.
 回复 引用   
#3楼 2008-03-08 08:16 刘[未注册用户]
非常感谢!太好了!
 回复 引用 查看   
#4楼 2008-03-15 00:12 BlackPhoenix      
依然无法解决,提示"找不到源行"晕了~
 回复 引用 查看   
#5楼 2009-05-08 14:25 李明阳      
非常感谢,不错,已经解决了我的问题.
 回复 引用   
#6楼 2009-05-19 11:29 weason[未注册用户]
谢谢!
 回复 引用 查看   
#7楼 2009-05-20 17:13 Jertun      
以前也没遇到过。今天试了试Context.RewritePath(string,string,string)方法出现了。找了半天,在@page添加enableViewStateMac="false"就解决了
 回复 引用   
#8楼 2009-05-24 22:55 woodsonv[未注册用户]
今天也碰到了类似的问题,用与楼主相同的办法解决了,但就是不知道将enableEventValidation="false" enableViewStateMac="false"
设为false后对安全性会有哪些实质的影响?或者其它方面的变化呢?这种做法实在有点不放心,而从程序代码中去修改又无从下手!!!哪位高手指点指点呢!!!

 回复 引用   
#9楼 2009-06-03 13:50 zn[未注册用户]
强!谢!!
 回复 引用 查看   
#10楼 2010-08-07 15:14       
我是在页面中的一个Iframe提交(Post)到另一个Iframe的时候遇到“验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate
”错误的,按照楼主的方式解决问题,非常感激!