【问题标题】:Form that submits to the same action, with an id提交相同操作的表单,带有 id
【发布时间】:2011-02-03 00:56:16
【问题描述】:

我正在尝试做一些看起来非常简单的事情:创建一个表单,该表单提交到它所请求的相同 URL,并带有一个 id。

如果我不关心 id,我可以这样做:

<% using(Html.Form()) { %>
    <!-- stuff -->
<% } %>

但由于我想要 id,我必须使用不同的重载。

我想要一些类似的东西:

<% using(Html.Form(some, args, new {id="myAwesomeForm"})) { %>
    <!-- stuff -->
<% } %>

我不能只对动作和控制器进行硬编码,因为表单在几个不同的地方使用。有时 URL 会有参数(/items/edit/1,其他时候没有/items/create

一定有一些非常简单的方法可以做到这一点,当我看到它时,我会觉得自己像个白痴。那么,它是什么?


澄清:我的意思是 HTML 元素上的 id,如 &lt;form action="/my/action[/possible arguments]" id="myAwesomeForm"&gt;&lt;/form&gt;

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2 routes


    【解决方案1】:

    对动作和控制器使用null;它们将从当前的动作和控制器中填充。

     <% using (Html.BeginForm( null, null, null, FormMethod.Post, new { id = 3 } )) { %>
    
     <% } %>
    

    【讨论】:

    • 对不起,我澄清了我的问题。我的意思是id HTML 属性,而不是路由参数。在我上面的示例中,您发布的内容将导致 &lt;form action="/my/action/3"&gt;&lt;/form&gt;,这不是我想要的。
    • @notJim - 哦,对路由值也使用 null 并添加 FormMethod 以获得正确的签名。
    【解决方案2】:

    只使用第一个重载(routeValues As Object)

    它将采用当前的区域名称控制器名称动作名称参数。 Post 是默认的表单方法。

    <%
        Using Html.BeginForm(New With {.id = 3})
    
        End Using
    %>
    

    【讨论】:

    • 检查说明,我在寻找 HTML id,而不是路由中的 id
    • 哦,好的。你总是可以去老学校,只写 html... ... 它是 2001 年,但它可能比复杂的 HTML 辅助方法更容易理解你的代码在做什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-10
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多