一页上的多个操作(表单) - 编辑详细数据后如何不丢失主数据?

时间:2010-03-31 09:23:54

标签: c# asp.net-mvc

我有一个表单,用户可以在其中编辑组的成员。

因此,他们有可能添加成员或删除现有成员。所以网址就像 “... / 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吗?

提前致谢。

2 个答案:

答案 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