【问题标题】:using runat="server" gives Validation of viewstate MAC failed使用 runat="server" 验证视图状态 MAC 失败
【发布时间】:2013-01-29 12:21:47
【问题描述】:

Javascript

var form = document.getElementById('date_budget');
pop('', 'exp_upd', '95', '80');
form.action = "test.aspx";
form.target = 'exp_upd';
form.submit();

HTML

<form id="date_budget" name="date_budget" method="post">
    <table>
    <tr>
        <!--#include file="zone.inc" -->
        <td id='mlodg_loc'><select name="loc" id="loc">
                <option value="Select Location">Select Location</option>
            </select></td>
        <td>
            <select name="month" id="month">    
                <option value="1">1</option>
            </select>
        </td>
        <td>
            <select name="year" id="year">
                <option value="2013">2013</option>
            </select>
        </td>
    </tr>
    </table>
</form>

上面的代码打开了一个弹出窗口,但是当我通过添加 runat 属性更改 html 时,我收到“Validation of viewstate MAC failed”,以及一些额外的垃圾。修改后的html如下

<form id="date_budget" name="date_budget" method="post" runat="server">
    <table>
        <tr>
            <!--#include file="zone.inc" -->
        <td id='mlodg_loc'><select name="loc" id="loc" runat="server">
            <option value="Select Location">Select Location</option>
            </select></td>
            <td>
                <select name="month" id="month" runat="server"> 
                <option value="1">1</option>
                </select>
            </td>
            <td>
                <select name="year" id="year" runat="server">
                <option value="2013">2013</option>
                </select>
            </td>
        </tr>
    </table>
</form>

是否有任何解决方法可以同时使用 runat 服务器并在 JS 中使用相同的元素,而不使用像 &lt;%= hidBT.ClientID %&gt; 这样的那些 asp 标签,我不想要任何其他方式。

【问题讨论】:

  • 我看不出你的两个 html 代码块有什么不同。

标签: c# javascript asp.net .net


【解决方案1】:
  1. 尝试在您的web.config(或)中添加&lt;pages enableViewStateMac="false"&gt;(或)

  2. 尝试将此&lt;form id="date_budget" name="date_budget" method="post"&gt; 更改为

    这个&lt;form id="date_budget" name="date_budget" runat="server"&gt;

    不应指定方法或动作

【讨论】:

  • 我试过第一个但没用,第二个也是。
  • 在 中添加了 ,谢谢。
【解决方案2】:

您可以尝试在控件或@Page 指令中设置 ClientIDMode="Static"。这将使表单的 id 保持为“date_budget”。

否则,如果您不需要页面上的 ViewState,那么您可以在 @Page 指令中使用 EnableViewState="false" 禁用它。

【讨论】:

  • 没有一个解决方案有效,如果我使用 runat 服务器,我的意思是同样的问题,也遵循以下答案
猜你喜欢
  • 1970-01-01
  • 2010-09-24
  • 2011-12-18
相关资源
最近更新 更多