这是我遇到问题的一行:
<% 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);
}
答案 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)不支持表格回发中的主题标签。