ASP.NET MVC多个开始表单?

时间:2010-12-14 10:10:13

标签: c# asp.net-mvc

您好我正在使用多个开始表单。我不确定这是不是一个好主意。这是我的代码。

<% using (Html.BeginForm("TagManagement", "InternalTag",FormMethod.Post))
   {%>
   <%: Html.AntiForgeryToken() %>

    <table>         
        <tr>
            <td><%:Html.Label("Type") %></td>
            <td style="text-align:left"><%:Html.DropDownList("ObjectType",ViewData["TagObjects"] as IEnumerable<SelectListItem>)%></td>
        </tr>
        <tr>
            <td><%:Html.Label("Search ID")%></td>
            <td style="text-align:left"><%:Html.TextBox("ObjectID2")%></td>
        </tr>
        <tr>
            <td></td>
            <td><input id="Search" type="submit" value="Search" />&nbsp;&nbsp;&nbsp;<input id="Create" type="button" value="Add to New Tag" onclick="AddTagElements()" /></td>
        </tr>
    </table>
    <br />

<% } %>

<% using (Html.BeginForm("CreateTag","InternalTag",FormMethod.Post)) { %>
<%: Html.AntiForgeryToken() %>
<div id="AddTag">
      <input id='SaveTag' type='submit' value='Save' style='width: 125px' />
</div>
<% } %>

路由代码

"Tags/{controller}/{action}/{id}/{type}",
new { action = "Index", id = UrlParameter.Optional, type = UrlParameter.Optional }

我的控制器方法:

public ActionResult TagManagement(FormCollection FC,Guid? ID,InternalTagRef_Types? Type)
public ActionResult CreateTag(FormCollection FC, Guid ID, InternalTagRef_Types Type)

当我点击搜索时,TagManagement Actions参数会被正确填充。当我单击SaveTag时,它会尝试调用CreateTag操作但不能,因为它缺少ID和Type。我得到错误参数字典包含非可空类型'System.Guid'的参数'ID'的空条目。它应该从URL获取这些值,即 http://localhost:1338/Tags/InternalTag/TagManagement/D104EBF5-470B-4FAA-9FC7-5391922CCE94/Projects就像TagManagement一样。请帮忙。

2 个答案:

答案 0 :(得分:3)

您的第二个表单不包含任何输入字段(提交按钮除外),因此在提交表单时,不会向服务器发送任何内容,并且控制器操作无需绑定任何内容。因此,您需要像在第一个表单中那样包含文本字段或隐藏字段。


更新:

您在生成的操作中包含路由参数:

<% using (Html.BeginForm(
        "CreateTag", "InternalTag", 
        new { id = RouteData.Values["id"], type = RouteData.Values["type"] }, 
        FormMethod.Post)) { %>
    <%: Html.AntiForgeryToken() %>
    <div id="AddTag">
        <input id='SaveTag' type='submit' value='Save' style='width: 125px' />
    </div>
<% } %>

答案 1 :(得分:1)

我建议在此表单中添加一个隐藏字段,其中包含您的代码,因此在提交表单时,您的代码将可用。其次,同样重要

<input id="Create" type="button" value="Add to New Tag" onclick="AddTagElements()" />

AddTagElements javascript函数需要使用新标记更新隐藏字段的值。

<% using (Html.BeginForm("CreateTag","InternalTag",FormMethod.Post)){%>
    <%: Html.AntiForgeryToken() %>
    <div id="AddTag">
        <input id="tags" type="hidden" value=""/>
        <input id='SaveTag' type='submit' value='Save' style='width: 125px' />
    </div>
<%}%>