【问题标题】:Html.BeginForm() with an absolute URL?带有绝对 URL 的 Html.BeginForm()?
【发布时间】:2010-12-30 05:20:33
【问题描述】:

我需要将 POST 操作设为绝对 URL(例如,http://www.cnn.com)。有没有办法使用 Html.BeginForm() 助手并将其传递给 url?

【问题讨论】:

    标签: html asp.net-mvc forms


    【解决方案1】:

    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"}
    )
    

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

    【讨论】:

    • 这节省了我的时间。太好了!
    【解决方案2】:

    HtmlHelper.BeginForm 方法所做的只是帮助您创建一个针对本地控制器的&lt;form&gt; 标记。如果您要发布到外部网站,只需写出实际的&lt;form&gt; 标签,即

    <form action="http://www.example.com/someaction" method="post">
        Actual form content in here
    </form>
    

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

    【讨论】:

    • 是的,我做到了。但我只是想知道我是否在 MVC 中遗漏了一些东西(来自 RoR Land,有一个表单 {url=()} 方法。谢谢。
    • 如果您手动创建表单,可能会有一些与验证相关的内容不会为您创建 - 因此请注意您是否使用 jQuery 进行 MVC 验证
    • 正如 simon weaver 指出的,如果不使用 HtmlHelper 验证框架是行不通的。我自己也遇到过这个问题
    • 如果你也想要验证,使用@{ViewContext.FormContext = new FormContext(); } 在哪里使用开始表单和 @{ViewContext.FormContext = null; } 你应该在哪里关闭 beginform 的使用。
    • Simon_Weaver 和 Zasz 的 cmets 对于任何考虑遵循 Aaronaught 建议的人来说非常有用。
    【解决方案3】:

    查看 mvc 源代码,html.beginform 方法不仅只创建原生 html 表单,还添加了一些我想要的客户端验证,

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-26
      • 2012-02-22
      相关资源
      最近更新 更多