【发布时间】:2013-10-12 05:46:00
【问题描述】:
当使用这样的表单时:
<h2>
<%:Model.EulaTitle %>
</h2>
<p>
<%=Model.EulaHtml %>
</p>
<a name="errors"></a>
<%:Html.ValidationSummary()%>
<div style="text-align:center;">
<% using (Html.BeginForm())
{ %>
<%:Html.HiddenFor(model => model.SourceUrl)%>
<%:Html.HiddenFor(model => model.EulaId)%>
<a name="accept"></a>
<div style="text-align:center;">
<%:Html.CheckBoxFor(model => model.Accepted)%>
<%:Html.LabelFor(model => model.Accepted)%>
</div>
<input type="submit" value="Submit">
<% } %>
</div>
我需要页面在发布时滚动到#errors。 Model.EulaHtml 包含一些长度的 EULA 文本,如果用户在不接受协议的情况下发布页面,我希望用户不必手动向下滚动以查看错误消息。
如果控制器在 Post 上检测到 ModelState.IsValid,它会重定向到另一个页面。如果没有,我需要留在此页面上,但滚动到 #errors 书签锚标记。
我曾考虑在表单操作中将“#errors”添加到 url 的末尾,但我收到了 a potentially dangerous .... ('%') 的错误。我可能错误地编码了哈希标记。其他人必须处理这个吗?我们正在处理对浏览器兼容性(IE6+ 和其他所有东西)的非常严格的要求,所以我尽量避免使用 JavaScript。
更新
我收到的错误是:
A potentially dangerous Request.Path value was detected from the client (%).
我将Html.BeginForm() 调用修改为
<% using (Html.BeginForm(new { @action="#errors" }))
{ %>
得到的网址是:
http://..../TheControllerName/Eula/%2523errors/
我还注意到,当我以这种方式设置 action 属性时,正在传递的一些 queryString 参数消失了。 (不足为奇,但对我来说没有立即明显的解决方法)
【问题讨论】:
-
您遇到的确切错误是什么?正确的做法是将#errors 添加到url 的末尾。重定向到末尾带有#errors 的URL 后,您在浏览器的地址栏中看到正确的地址了吗?
-
更新了错误的问题和生成的 url
标签: asp.net-mvc