使用自定义路径或绝对URI与Html.BeginForm()

时间:2011-07-20 07:31:38

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

  

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

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

我尝试了Html.BeginForm(new { action ="http://absolute.com"})Html.BeginForm(new { @action ="http://absolute.com"}),渲染的html为<form action="/Pro/Contact/http%3a/absolute.com/">。正如你所看到的那样,它被附加而不是被替换。

2 个答案:

答案 0 :(得分:4)

带有单个参数的

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>

UPDATE:方法如下所示,不会使用JavaScript客户端验证。

因为,你真的不需要助手来找出表单的路径。您可以手动使用表单的html和set动作。

如果您使用输入字段的帮助程序,验证仍然有效。

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

答案 1 :(得分:0)

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

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