2014-12-01 4 views
1

У меня есть страница (User.aspx), которая отображает список пользователей, ожидающих принятия. Страница позволяет администратору принимать пользователей для организации, нажав кнопку рядом с именем пользователя. Когда администратор нажимает кнопку для любого пользователя в списке, он принимает пользователя в верхней части списка, а не выбранного пользователя. Я проверил идентификатор в наборе инструментов разработчика Chrome и передал правильный идентификатор, но когда элемент управления попадает в точку останова в Action (AcceptUser), он показывает идентификатор первого пользователя в списке. Но похоже, что что-то меняет значение ViewBag (UserId) между ними. Кто-нибудь может посоветовать мне, как исправить эту проблему.ViewBag передает измененное значение PartialView

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 
} 
+0

Его для каждого цикла, что вы ожидаете получить? .. – Rex

+0

Я ожидаю получить UserId выбранного пользователя, а не первого пользователя в списке. – user1211185

+0

Я не вижу никаких проверок условий внутри цикла. – Rex

ответ

1

Я думаю, проблема в том, что div Id в AcceptUserDialog не уникален. Он одинаковый для всех кнопок в списке, если вы сделаете его уникальным для каждой строки, он должен работать.

Как показано ниже, приведите div в страницу users.aspx и поместите диалоговое окно визуализации внутри 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 
<% } %> 

Попробуйте выше, мы надеемся, это будет разобраться в вашей проблеме.

+0

спасибо, он отлично работал. – user1211185

0

Это сделав некоторую отладку, чтобы проверить это, но для начала добавьте это в представление, чтобы отлаживать, что идентификаторы одинаковы, используя источник представления и глядя на форму, чтобы убедиться, что она не всегда передает первый идентификатор для каждого запись.

Вы также можете попробовать получить доступ к ViewData непосредственно как ViewData["OrgId"] и ViewData["UserId"].

+0

и ViewData, и ViewBag отображают тот же результат, который отличается от ИД. Они отображают userId первого пользователя в списке. – user1211185

Смежные вопросы