哈希在Html.BeginForm中

时间:2012-10-22 20:29:53

标签: c# asp.net-mvc

这是我遇到问题的一行:

<% using(Html.BeginForm("Create#result", "Report", FormMethod.Post)) { %>

使用C#3.5和MVC2,表单呈现如下:

<form action="/Report.aspx/Create#result" method="post">

现在使用C#4.0和MVC2,表单呈现如下:

<form action="/Report.aspx/Create%23result" method="post">

这会导致问题:

System.Web.HttpException (0x80004005): A public action method 'Create#result' was not found

我认为新行为存在问题,我不希望哈希转义。 它在哪里发生? 我可以改变行为吗?

MVC版本应该在某个时候更新,但是当这种行为开始导致问题时,我正在处理另一部分。

更新

我通过在客户端上使用jquery更新表单操作来解决它。

表格

<% using(Html.BeginForm("Create", "Report", FormMethod.Post, new { id = "frmReport" })) { %>

的Javascript

var frmReport = $("#frmReport");
if (0 < frmReport.length) {
    var action = frmReport.attr("action");
    action = action + "#result";
    frmReport.attr("action", action);
}

1 个答案:

答案 0 :(得分:2)

这发生在MVC类System.Web.Mvc.TagBuilder的深处,这意味着你可能没有太多可以做的事情。如果这段代码没有改变,我不会感到惊讶,但是底层的html编码函数是用.NET 4修改的。

private void AppendAttributes(StringBuilder sb)
{
    foreach (KeyValuePair<string, string> current in this.Attributes)
    {
        string key = current.Key;
        if (!string.Equals(key, "id", StringComparison.Ordinal) || !string.IsNullOrEmpty(current.Value))
        {
            string value = HttpUtility.HtmlAttributeEncode(current.Value);
            sb.Append(' ').Append(key).Append("=\"").Append(value).Append('"');
        }
    }
}

那说我很惊讶这首先适合你,我相信有些浏览器(IE)不支持表格回发中的主题标签。