在ASP.NET MVC应用程序中,我为管理员制作了接受或拒绝新成员的逻辑。我正在显示一个成员列表和两个按钮Accept和Reject,如下所示:
<% foreach (var mm in (ViewData["pendingmembers"] as List<MyMember>)) %>
<% { %>
<tr><td>Username:<%=mm.UserName %></td><td>
<tr><td>Firstname:<%=mm.FirstName %></td><td>
...etc...
<tr>
<td>
<% using (Html.BeginForm("AcceptPendingUser", "Admin"))
{ %>
<input type="submit" value="Accept" />
<% } %>
</td>
<td>
<% using (Html.BeginForm("RejectPendingUser", "Admin"))
{ %>
<input type="submit" value="Reject" />
<% } %>
</td>
</tr>
<% } %>
因此,待处理成员数据列表位于MyMember对象列表中。每个MyMember对象将打印出成员,并设置两个按钮供管理员接受或拒绝待定成员。
然后,在控制器中我将这两个输入字段/表单的处理分开,如下所示:
public ActionResult AcceptPendingUser()
{
// TODO: Add code to save user into DB and send welcome email.
return RedirectToAction("Index");
}
public ActionResult RejectPendingUser()
{
// TODO: Add code to remove user from PendingUsers list and send rejection email.
return RedirectToAction("Index");
}
我想直接获取用户按下的按钮旁边的对象。 如何将View中的MyMember对象发送到控制器? 或者如何通过按下按钮发送数字索引?也许有一个隐藏的领域?
答案 0 :(得分:3)
最简单的选项可能是隐藏的输入:
<input type="hidden" value="<%=mm.Key%>" name="key" id="key" />
(相应地命名;每种形式)
然后两个控制器将采用一个名为“key”的参数(重命名以适应)。如果要从多个输入中解析对象,则需要ModelBinder
。当然,您可以考虑使用基于查询字符串的URL,或使用jQuery(或其他一些脚本助手)之类的东西来提交数据而不需要表单(如果脚本可用),而不是2 * n表单。
答案 1 :(得分:3)
不使用HTML按钮,而是考虑使用ActionLink并将其构造为包含正在批准的成员的ID。另一种选择是拥有一个复选框(其值是被批准成员的ID),管理员可以为每个要批准的成员选择一个复选框,类似的一个用于拒绝,一个用于批准/拒绝整个表单的按钮。 / p>
答案 2 :(得分:3)
回答自己和其他mvc新手:
我最终使用了这段代码:
查看:
<%=Html.ActionLink(
"Jump",
"Jump",
new { name=(ViewData["Person"] as Person).Name,
person=ViewData["Person"]},
null) %>
控制器:
public ActionResult Index()
{
ViewData["Title"] = "Home Page";
ViewData["Message"] = "Welcome to ASP.NET MVC!";
Person p = new Person();
p.Name = "Barrack";
p.Age = 35;
ViewData["Person"] = p;
return View();
}
public ActionResult Jump(string name, Person person)
{
return View();
}
在Jump方法中调试应用程序为name参数提供了很好的“Barrack”-string,但是在null中为Person参数。
我也理解那些评论者试图解释的内容:将简单的数据类型(如字符串和整数)发送到控制器很容易,但复杂的类型(如Person对象)需要其他东西。
基本上传递一个int对我来说已经足够了。这里最难的部分是找出设置ActionLink的正确方法。
干杯, POM