我有一个表单,用户可以在其中编辑组的成员。
因此,他们有可能添加成员或删除现有成员。所以网址就像 “... / Group / Edit / 4”其中4是该组的ID。
视图看起来像这样
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<% using (Html.BeginForm("AddUser", "Group")) %>
<%{%>
<label for="newUser">User</label>
<%=Html.TextBox("username")%>
<input type="submit" value="Add"/>
</div>
<%}%>
<% using (Html.BeginForm("RemoveUser", "Group")) %>
<%{%>
<div class="inputItem">
<label for="groupMember">Bestehende Mitglieder</label>
<%= Html.ListBox("groupMember", from g in Model.GetMembers() select new SelectListItem(){Text = g}) %>
<input type="submit" value="Remove" />
</div>
<%}%>
</asp:Content>
问题是在添加或删除一个用户后我丢失了该组的ID。解决此类问题的最佳解决方案是什么? 我应该使用隐藏字段来保存组ID吗?
提前致谢。
答案 0 :(得分:1)
隐藏字段是在帖子中持久保存id的好方法。
答案 1 :(得分:0)
您可以使用隐藏字段,也可以将值解析为路径。我不确定你是如何解析视图的组ID,但它看起来像:
<% using (Html.BeginForm("AddUser", "Group", new { groupId = Model.GroupID })) { %>
然后您的控制器将使用PRG模式
看起来像这样[HttpGet]
public ViewResult Edit(int groupId) {
//your logic here
var model = new MyModel() {
GroupID = groupId
};
return View("Edit", model);
}
[HttpPost]
public ActionResult AddUser(int groupId, string username) {
//your logic here
return RedirectToAction("Edit", new { GroupID = groupId });
}
[HttpPost]
public ActionResult RemoveUser(int groupId, string username) {
//your logic here
return RedirectToAction("Edit", new { GroupID = groupId });
}
这种方法的优点是更多RESTful