ViewBag 正在传递更改的值 PartialView
本文关键字:PartialView ViewBag | 更新日期: 2023-09-27 18:32:52
我有一个页面(User.aspx),其中显示了等待接受的用户列表。页面允许管理员通过单击用户名旁边的按钮来接受用户加入组织。当管理员单击列表中任何用户的按钮时,它会接受列表顶部的用户而不是所选用户。我已经检查了Chrome开发人员工具包中的id,它正在传递正确的id,但是当控件命中操作(AcceptUser)中的断点时,它会显示列表中第一个用户的ID。但看起来有些东西正在改变ViewBag(UserId)之间的值。任何人都可以建议我如何解决此问题。
用户.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>
组织控制器
public ActionResult AcceptUser(Guid userId, Guid orgId)
{
// Logic here
}
我认为问题是AcceptUserDialog中的div ID不是唯一的。列表中的所有按钮都是一样的,如果使每一行都唯一,它应该可以工作。
如下所示,将div 带入用户.aspx页面并将渲染对话框放在div 中,然后使用 UserId 作为div Id ( <div id="<%= user.Id%>">
) 和 href ( href="#<%= user.Id%>"
)。
用户.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
<% } %>
尝试上面,希望它能解决您的问题。
需要
一些调试来验证这一点,但首先,将其添加到视图中,以调试 ID 是否相同,方法是使用视图源并查看窗体以确保它并不总是为每个条目传递第一个 ID。
您也可以尝试直接从 ViewData 作为ViewData["OrgId"]
访问,然后改为ViewData["UserId"]
。