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

时间:2009-12-27 03:51:09

标签: html asp.net-mvc forms

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

3 个答案:

答案 0 :(得分:63)

BeginForm方法有几个重载。 为了使用所需的url在form标签上设置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"}
)

这不会对动作参数进行编码。

答案 1 :(得分:15)

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

<form>

这就是它的全部。 MVC表单不像ASP.NET WebForms中的表单,其中有一堆ViewState和事件字段以及其他神奇元素。它们只是普通的旧HTML表单。

答案 2 :(得分:0)

检查mvc源代码,html.beginform方法不仅仅创建本机html表单,还添加了我想要的客户端验证,

if (htmlHelper.ViewContext.ClientValidationEnabled) 
{
    htmlHelper.ViewContext.FormContext.FormId = tagBuilder.Attributes["id"];
}

所以这将是一个问题,我只是写自己的扩展