带有绝对URL的Html.BeginForm()?

dal*_*ale 32 html forms asp.net-mvc

我需要将POST操作设置为绝对URL(例如,http://www.cnn.com).有没有办法使用Html.BeginForm()帮助程序并传递它的URL?

Nik*_*tov 64

BeginForm方法有几个重载.要使用所需的url在form标记上设置action属性,您需要使用以下BeginForm重载:

BeginForm(String, String, FormMethod, IDictionary<String, Object>)
// here are the parameter names:
BeginForm(actionName, controllerName, method, htmlAttributes)
Run Code Online (Sandbox Code Playgroud)

由于您要发布到外部站点,因此无需设置actionName和controllerName,只需将它们保留为null即可.

@Html.BeginForm(
   null, null, FormMethod.Post, new {@action="http://cnn.com/post"}
)
Run Code Online (Sandbox Code Playgroud)

这不会对action参数进行编码.


Aar*_*ght 15

HtmlHelper.BeginForm方法所做的只是帮助您创建一个<form>以本地控制器为目标的标记.如果您要发布到外部网站,只需写出实际<form>标记,即

<form action="http://www.example.com/someaction" method="post">
    Actual form content in here
</form>
Run Code Online (Sandbox Code Playgroud)

这里的所有都是它的.MVC表单不像ASP.NET WebForms中的表单,其中有一堆ViewState和事件字段以及其他神奇元素.它们只是常规的旧HTML表单.

  • 如果您手动创建表单,可能会有一些与验证无关的问题 - 请注意您是否使用jQuery进行MVC验证 (4认同)
  • 如果您还想进行验证,请使用@ {ViewContext.FormContext = new FormContext(); 你在哪里使用begin表单和@ {ViewContext.FormContext = null; 无论你在哪里关闭beginform的使用. (2认同)