【发布时间】:2010-12-30 05:20:33
【问题描述】:
我需要将 POST 操作设为绝对 URL(例如,http://www.cnn.com)。有没有办法使用 Html.BeginForm() 助手并将其传递给 url?
【问题讨论】:
标签: html asp.net-mvc forms
我需要将 POST 操作设为绝对 URL(例如,http://www.cnn.com)。有没有办法使用 Html.BeginForm() 助手并将其传递给 url?
【问题讨论】:
标签: html asp.net-mvc forms
BeginForm 方法有几个重载。 为了使用所需的 url 在表单标签上设置 action 属性,您需要使用 BeginForm 的以下重载:
BeginForm(String, String, FormMethod, IDictionary<String, Object>)
// here are the parameter names:
BeginForm(actionName, controllerName, method, htmlAttributes)
由于要发布到外部站点,因此无需设置actionName和controllerName,只需将它们保留为null即可。
@Html.BeginForm(
null, null, FormMethod.Post, new {@action="http://cnn.com/post"}
)
这不会对动作参数进行编码。
【讨论】:
HtmlHelper.BeginForm 方法所做的只是帮助您创建一个针对本地控制器的<form> 标记。如果您要发布到外部网站,只需写出实际的<form> 标签,即
<form action="http://www.example.com/someaction" method="post">
Actual form content in here
</form>
仅此而已。 MVC 表单不像 ASP.NET WebForms 中的表单,其中您有一堆 ViewState 和事件字段以及其他神奇的元素。它们只是普通的旧 HTML 表单。
【讨论】:
查看 mvc 源代码,html.beginform 方法不仅只创建原生 html 表单,还添加了一些我想要的客户端验证,
if (htmlHelper.ViewContext.ClientValidationEnabled)
{
htmlHelper.ViewContext.FormContext.FormId = tagBuilder.Attributes["id"];
}
所以这会是个问题,我只是写我自己的扩展
【讨论】: