ViewBag传递更改的值PartialView

时间:2014-12-01 17:19:09

标签: c# asp.net-mvc-4 partial-views

我有一个页面(User.aspx),显示等待接受的用户列表。页面允许管理员通过单击用户名旁边的按钮来接受组织用户。当管理员单击列表中任何用户的按钮时,它接受列表顶部的用户而不是选定的用户。我已经在Chrome开发者工具包中检查了ID,它正在传递正确的ID,但是当控件在Action(AcceptUser)中遇到断点时,它会在列表中显示第一个用户的ID。但看起来有些东西正在改变ViewBag (UserId)之间的价值。任何人都可以建议我如何解决这个问题。

Users.aspx

<% foreach (var user in Model.UsersAwaitingAcceptance)
{ %>

    <a class="label label-SU-success" href="#accept" role="button" data-toggle="modal"><i class="icon-success icon-white"></i></a>
    <% Html.RenderPartial("AcceptUserDialog", Model.Accept, new ViewDataDictionary { { "OrgId", Model.OrgId }, { "UserId", user.Id } }); %>
<% } %>

AcceptUserDialog.ascx

<div id="accept">
    <% using (Html.BeginForm("AcceptUser", "Organization", new { userId = ViewBag.UserId, orgId = ViewBag.OrgId}, FormMethod.Post, new { @class = "zero-bottom form-horizontal" }))
    { %>
        // UserId is different here
        <%= ViewBag.UserId%>
        <%= ViewData["UserId"]%>

        // Above code is displaying different UserId
    <% } %>
<\div>

OrganizationController

public ActionResult AcceptUser(Guid userId, Guid orgId)
{
    // Logic here
}

2 个答案:

答案 0 :(得分:1)

我认为问题是AcceptUserDialog中的div Id不是唯一的。对于列表中的所有按钮都是一样的,如果你对每一行都是唯一的,它应该可以工作。

如下所示,将div添加到users.aspx页面并将div对话框放入div中。然后使用UserId作为div Id(<div id="<%= user.Id%>">)和href(href="#<%= user.Id%>")。

<强> Users.aspx

<% foreach (var user in Model.UsersAwaitingAcceptance)
{ %>

    <a class="label label-SU-success" href="#<%= user.Id%>" role="button" data-toggle="modal"><i class="icon-success icon-white"></i></a>
<div id="<%= user.Id%>">
        <% Html.RenderPartial("AcceptUserDialog", Model.Accept, new ViewDataDictionary { { "OrgId", Model.OrgId }, { "UserId", user.Id } }); %>
<% } %>
<\div>

<强> AcceptUserDialog.ascx

<% using (Html.BeginForm("AcceptUser", "Organization", new { userId = ViewBag.UserId, orgId = ViewBag.OrgId}, FormMethod.Post, new { @class = "zero-bottom form-horizontal" }))
{ %>
    // UserId is different here
    <%= ViewBag.UserId%>
    <%= ViewData["UserId"]%>

    // Above code is displaying different UserId
<% } %>

尝试以上操作,希望它能解决您的问题。

答案 1 :(得分:0)

它需要进行一些调试来验证这一点,但是要开始,请将其添加到视图中,通过使用视图源并查看要生成的表单来调试ID是否相同确定它并不总是为每个条目传递第一个ID。

您也可以尝试直接以ViewData["OrgId"]ViewData["UserId"]从ViewData访问。