C# asp.net页面的隐藏视图状态出现500内部服务器错误

C# asp.net页面的隐藏视图状态出现500内部服务器错误,c#,.net,client-server,cross-domain,C#,.net,Client Server,Cross Domain,我正在尝试将数据发布到跨域。如果表单未使用runat=“server”,并且在表单使用runat=“server”时过帐时出现内部错误,则可以正常工作 调试后,我发现问题出在页面上自动生成的uu viewstate代码上。请查找下面的代码 客户端HTML实现: 无标题页 服务器端代码: 公共部分类保存文件:System.Web.UI.Page { 私有无效页面加载(对象发送方,System.EventArgs e) { AddHeader(“访问控制允许原点“,”*”) if(Request

我正在尝试将数据发布到跨域。如果表单未使用runat=“server”,并且在表单使用runat=“server”时过帐时出现内部错误,则可以正常工作

调试后,我发现问题出在页面上自动生成的uu viewstate代码上。请查找下面的代码

客户端HTML实现:

无标题页
服务器端代码:
公共部分类保存文件:System.Web.UI.Page
{
私有无效页面加载(对象发送方,System.EventArgs e)
{
AddHeader(“访问控制允许原点“,”*”)
if(Request.HttpMethod==“GET”| | Request.HttpMethod==“HEAD”)
{
回复。写下(“获得成功”);
}
其他的
{
对于(int i=0;i
您能否帮助我忽略客户端隐藏的viewstate代码,或者忽略服务器端的响应viewstate

非常感谢
Anna

尝试通过向卸载处理程序添加一行代码来禁用视图状态:

Page.EnableViewState = false;

请参见

我找到了这个问题的解决方案。请在下面找到

public class BasePage : Page

{

  private static string[] aspNetFormElements = new string[] 

  { 

    "__EVENTTARGET",

    "__EVENTARGUMENT",

    "__VIEWSTATE",

    "__EVENTVALIDATION",

    "__VIEWSTATEENCRYPTED",

  };



  protected override void Render(HtmlTextWriter writer)

  {

    StringWriter stringWriter = new StringWriter();

    HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);

    base.Render(htmlWriter);

    string html = stringWriter.ToString();

    int formStart = html.IndexOf("<form");

    int endForm = -1;

    if (formStart >= 0)

      endForm = html.IndexOf(">", formStart);



    if (endForm >= 0)

    {

      StringBuilder viewStateBuilder = new StringBuilder();

      foreach (string element in aspNetFormElements)

      {

        int startPoint = html.IndexOf("<input type=\"hidden\" name=\"" + element + "\"");

        if (startPoint >= 0 && startPoint > endForm)

        {

          int endPoint = html.IndexOf("/>", startPoint);

          if (endPoint >= 0)

          {

            endPoint += 2;

            string viewStateInput = html.Substring(startPoint, endPoint - startPoint);

            html = html.Remove(startPoint, endPoint - startPoint);

            viewStateBuilder.Append(viewStateInput).Append("\r\n");

          }

        }

      }



      if (viewStateBuilder.Length > 0)

      {

        viewStateBuilder.Insert(0, "\r\n");

        html = html.Insert(endForm + 1, viewStateBuilder.ToString());

      }

    }



    writer.Write(html);

  }

}
公共类基页:第页
{
私有静态字符串[]aspNetFormElements=新字符串[]
{ 
“\u事件目标”,
“_事件参数”,
“uu VIEWSTATE”,
“\u事件验证”,
“uu VIEWSTATEENCRYPTED”,
};
受保护的覆盖无效渲染(HtmlTextWriter编写器)
{
StringWriter StringWriter=新StringWriter();
HtmlTextWriter htmlWriter=新的HtmlTextWriter(stringWriter);
base.Render(htmlWriter);
字符串html=stringWriter.ToString();
int formStart=html.IndexOf(“,formStart”);
如果(endForm>=0)
{
StringBuilder viewStateBuilder=新建StringBuilder();
foreach(aspNetFormElements中的字符串元素)
{
int startPoint=html.IndexOf(“,startPoint);
如果(端点>=0)
{
终点+=2;
字符串viewStateInput=html.Substring(startPoint,endPoint-startPoint);
html=html.Remove(startPoint,endPoint-startPoint);
viewStateBuilder.Append(viewStateInput.Append(“\r\n”);
}
}
}
如果(viewStateBuilder.Length>0)
{
viewStateBuilder.Insert(0,“\r\n”);
html=html.Insert(endForm+1,viewStateBuilder.ToString());
}
}
writer.Write(html);
}
}
请在此页面上查找更多信息:

非常感谢
Anna

我认为问题在于viewstate MAC的验证。由于客户端视图状态mac与服务器端视图状态mac不匹配。谢谢您的回答。然而我得到了它。
Page.EnableViewState = false;
public class BasePage : Page

{

  private static string[] aspNetFormElements = new string[] 

  { 

    "__EVENTTARGET",

    "__EVENTARGUMENT",

    "__VIEWSTATE",

    "__EVENTVALIDATION",

    "__VIEWSTATEENCRYPTED",

  };



  protected override void Render(HtmlTextWriter writer)

  {

    StringWriter stringWriter = new StringWriter();

    HtmlTextWriter htmlWriter = new HtmlTextWriter(stringWriter);

    base.Render(htmlWriter);

    string html = stringWriter.ToString();

    int formStart = html.IndexOf("<form");

    int endForm = -1;

    if (formStart >= 0)

      endForm = html.IndexOf(">", formStart);



    if (endForm >= 0)

    {

      StringBuilder viewStateBuilder = new StringBuilder();

      foreach (string element in aspNetFormElements)

      {

        int startPoint = html.IndexOf("<input type=\"hidden\" name=\"" + element + "\"");

        if (startPoint >= 0 && startPoint > endForm)

        {

          int endPoint = html.IndexOf("/>", startPoint);

          if (endPoint >= 0)

          {

            endPoint += 2;

            string viewStateInput = html.Substring(startPoint, endPoint - startPoint);

            html = html.Remove(startPoint, endPoint - startPoint);

            viewStateBuilder.Append(viewStateInput).Append("\r\n");

          }

        }

      }



      if (viewStateBuilder.Length > 0)

      {

        viewStateBuilder.Insert(0, "\r\n");

        html = html.Insert(endForm + 1, viewStateBuilder.ToString());

      }

    }



    writer.Write(html);

  }

}