【问题标题】:Using Custom paths or absolute URI with Html.BeginForm() [duplicate]使用带有 Html.BeginForm() 的自定义路径或绝对 URI [重复]
【发布时间】:2011-07-21 12:25:16
【问题描述】:

可能重复:
Html.BeginForm() with an absolute URL?

如何在Html.BeginForm() MVC3 Html 助手生成的<form> 标签的action 属性中放置绝对URI。我正在使用 MVC3 验证,不想通过编写自己的表单标签来丢失它。

我尝试了Html.BeginForm(new { action ="http://absolute.com"})Html.BeginForm(new { @action ="http://absolute.com"}),呈现的html 是<form action="/Pro/Contact/http%3a/absolute.com/">。如您所见,它被追加而不是替换。

【问题讨论】:

  • 我认为我的比另一个更具体,因为我希望 MVC 验证框架能够工作,而“dale”没有提到不使用帮助器的效果,也没有提到对验证的影响。不过,在发布之前,我也对该主题发表了评论。
  • 你在设置RouteValueDictionary,这里需要设置htmlAttributs :)

标签: asp.net-mvc asp.net-mvc-3


【解决方案1】:

BeginForm 带有单个参数的方法用于从参数变量中提供的 routedata 生成相对路径。这意味着,您正在设置名称为 action 的 URI 参数并赋予它和值 http://absolute.com,因此值将被编码。

您要使用的是overload,它会要求您提供 htmlAttributes。

不会编码动作属性值:

@using (Html.BeginForm(
     null, null, FormMethod.Post,
     new {@action="http://absolute.com/submit/example"}
)){}
// the result is:
<form action="http://absolute.com/submit/example" method="post"> 
</form>

更新: 下面显示的方法不会使用 JavaScript 客户端验证。

因为,您实际上并不需要帮助器来确定表单的路径。您可以手动使用 html 并设置表单的操作。

如果您对输入字段使用帮助器,验证仍然有效。

<form action="http://absolute.com/submit/example" method="post">    
    @Html.LabelFor(model => model.Example)
    @Html.ValidationMessageFor(model => model.Example, "*")
    @Html.TextAreaFor(model => model.Example, 8, 60, null)
</form>

【讨论】:

  • 如果您不使用帮助器创建表单,则客户端验证不起作用。这个我肯定知道,你可以自己试试。我查看了 MVC3 的源代码,发现当您说 BeginForm() 时,助手正在创建一些 FormContext 对象——这可能是我们在手写表单标签时缺少的。
  • 是的,如果手动创建
    元素,则无法利用客户端验证。
【解决方案2】:

一种方法是..我们可以使用 RedirectResult("http://absolute.com");在控制器动作方法中。

如果您从控制器(或操作过滤器等​​)重定向,您可以使用 RedirectResult 作为您的 ActionResult 类型。

【讨论】:

  • 发布到我的操作,然后重定向它会导致一个获取请求到"http://absolute.com",而我想要一个发布请求。另外,我将如何将所有已发布的值(发布到我的操作)传输到 http://absolute.com"
猜你喜欢
  • 2021-11-10
  • 2018-09-16
  • 2014-03-14
  • 2021-04-04
  • 2010-12-30
  • 1970-01-01
  • 2017-03-13
  • 1970-01-01
  • 2012-11-19
相关资源
最近更新 更多