1

这是我遇到问题的行:

<% 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);
}
4

1 回答 1

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) 不支持表单回发中的主题标签。

于 2012-10-22T21:26:21.733 回答