gpt4 book ai didi

asp.net-mvc - ASP.NET MVC - 将表单发布到 html 书签?

转载 作者:行者123 更新时间:2023-12-02 08:08:02 25 4
gpt4 key购买 nike

当使用这样的表单时:

<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>

我需要页面在发布时滚动到#errorsModel.EulaHtml 包含一定长度的 EULA 文本,我希望用户在不接受协议(protocol)的情况下发布页面时不必手动向下滚动来查看错误消息。

如果 Controller 在 Post 上检测到 ModelState.IsValid,则会重定向到另一个页面。如果没有,我需要留在此页面,但滚动到 #errors 书签 anchor 标记。

我曾考虑过将“#errors”添加到表单操作中的网址末尾,但我收到了类似潜在危险 .... ('%').我可能错误地对哈希标记进行了编码。还有其他人需要处理这个问题吗?我们正在处理浏览器兼容性的相当严格的要求(IE6+ 以及阳光下的其他所有内容),因此我尽量避免使用 JavaScript。

更新

我收到的错误是:

A potentially dangerous Request.Path value was detected from the client (%).

我将 Html.BeginForm() 调用修改为

<% using (Html.BeginForm(new { @action="#errors" }))
{ %>

生成的 URL 是:

http://..../TheControllerName/Eula/%2523errors/

我还注意到,当我以这种方式设置 action 属性时,传递的一些 queryString 参数消失了。 (这并不奇怪,但对我来说,没有立即明显的解决办法)

最佳答案

尝试这样:

<form action="<%: Url.Action("actionName", "controllerName") %>#errors" method="post">

<%: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">

</form>
<小时/>

您还可以编写一个自定义 HTML 帮助程序来完成这项工作:

public static class FormExtensions
{
public static MvcForm MyBeginForm(this HtmlHelper htmlHelper, string actionName, string controllerName, string fragment)
{
var formAction = UrlHelper.GenerateUrl(null, actionName, controllerName, htmlHelper.ViewContext.HttpContext.Request.Url.Scheme, null, fragment, null, htmlHelper.RouteCollection, htmlHelper.ViewContext.RequestContext, true);
var builder = new TagBuilder("form");
builder.MergeAttribute("action", formAction);
builder.MergeAttribute("method", "post", true);
htmlHelper.ViewContext.Writer.Write(builder.ToString(TagRenderMode.StartTag));
return new MvcForm(htmlHelper.ViewContext);
}
}

然后:

<% using (Html.MyBeginForm("index", "home", "errors")) { %>
...
<% }

关于asp.net-mvc - ASP.NET MVC - 将表单发布到 html 书签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4397203/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com