您好我正在使用多个开始表单。我不确定这是不是一个好主意。这是我的代码。
<% 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" /> <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一样。请帮忙。
答案 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>
<%}%>