У меня возникла проблема с MVC 3.0, которая должна иметь какое-то отношение к моему коду, но я изменял чей-то другой код, который только что покинул компанию и, похоже, испортил что-то, чего я не могу понять. У меня есть контроллер, который выглядит так:
Номиналы прямого отчета
/// <summary>
/// Gets currently logged in user's direct reports nominees
/// </summary>
/// <returns></returns>
[HttpGet]
public ViewResult DirectReportNominees()
{
this.nominationRepository = new NominationRowsRepository("Data Source=" + MvcApplication.SERVER_NAME + "; Initial Catalog=Cinet;Integrated Security=True",
_currentuser.SAMAccountName);
return View(nominationRepository.GetDirectReportNominees);
}
/// <summary>
/// Overload that triggers when supervisor clicks
/// Approve or Reject on Direct Report page
/// </summary>
/// <param name="submitButton"> button triggered to accept or Reject nomination</param>
/// <param name="NominationID">ID of nomination to change status of</param>
/// <returns></returns>
[HttpPost]
public ViewResult DirectReportNominees(string submitButton, string NominationID)
{
this.nominationRepository = new NominationRowsRepository("Data Source=" + MvcApplication.SERVER_NAME + "; Initial Catalog=Cinet;Integrated Security=True",
_currentuser.SAMAccountName);
switch (submitButton)
{
case "Accept":
NominationRow nomination = nominationRepository.GetNomination(NominationID);
Employee nominatedUser = _adRepository.GetDirectoryUserInfo(nomination.NomineeLogin);
// the email is sent from inside the repository
nominationRepository.AcceptNomination(NominationID, nominatedUser);
break;
case "Reject":
nominationRepository.RejectNomination(NominationID);
break;
default:
break;
}
NominationID = "";
return View(nominationRepository.GetDirectReportNominees);
}
Контроллер собирает класс базы данных. Различные номинации, относящиеся к заданным вошедшим в систему пользователям, отправляют отчеты и отправляют их в представленное ниже представление.
Вид выглядит так:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<CINet.Areas.CAP.Models.CapDomain.Repositories.NominationStruct>>" %>
<asp:Content ID="Content2" ContentPlaceHolderID="head" runat="server">
<%--<%: CINet.Views.Helpers.CssHelper.Css(Html, "~/Areas/CAP/Styles/Cap.css") %>--%>
<link rel="Stylesheet" type="text/css" href="<%: Url.Content("~/Areas/CAP/Styles/Cap.css") %>" />
</asp:Content>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<div id="outsidewrapper">
<div id="picture"></div>
<div id="insidewrapper">
<div id="navcontainer">
<% Html.RenderAction("Navigation", "Cap"); %>
</div>
<div id="CapsDashboard">
<h3>Direct Report Nominees</h3>
<table>
<colgroup>
<col id="nominee" />
<col id="nominatedBy" />
<col id="reason" />
<col id="status" />
</colgroup>
<thead>
<th scope="col">Name</th>
<th scope="col">Nominated By</th>
<th scope="col">Reason</th>
<th scope="col">Status</th>
<th></th>
</thead>
<tbody>
<% foreach (var nomination in Model) { %>
<tr>
<td><%: nomination.NomineeLogin %></td>
<td><%: nomination.NominatedBy %></td>
<td><%: nomination.NominationReason %></td>
<td><%: nomination.NominationStatus %></td>
<td>
<% if (nomination.NominationStatus == "Pending")
{ %>
<%--Create Accept Button--%>
<% Html.BeginForm("DirectReportNominees", "Cap", FormMethod.Post); %>
<%: Html.Hidden("NominationID", nomination.NominationID.ToString()) %>
<input type="submit" name="submitButton" value="Accept" />
<% Html.EndForm(); %>
<%--Create Reject Button--%>
<% Html.BeginForm("DirectReportNominees", "Cap", FormMethod.Post); %>
<%: Html.Hidden("NominationID", nomination.NominationID.ToString()) %>
<input type="submit" name="submitButton" value="Reject" />
<% Html.EndForm(); %>
<% } %>
</td>
</tr>
<%--</div>--%>
<% } %>
</tbody>
</table>
</div>
</div>
</div>
</asp:Content>
очевидно, что это инкапсулировано внутри SiteMaster. Представление берет модель и выкладывает различную информацию о пользователе, назначенном вместе с кнопкой «Отклонить и одобрить». Это значение кнопок должно быть установлено на конкретную вещь, которую пользователь хочет сделать, и есть скрытое поле ввода, значением которого является GUID номинации, который получен через базу данных. Первый раунд работает отлично, но после его завершения, когда представление возвращается из HttpPost, все скрытые значения теперь имеют одинаковое значение (GUID). Значение также всегда совпадает с GUID или строкой, которая была только что одобрена / отклонена. Любые идеи о том, что может держать эту ценность? Нет ViewData, который использовал программист, которого я вижу, и нет ошибок в View? Я попытался пройти через цикл foreach View, когда сообщение возвращается, и все они различаются, но к тому времени, когда он попадает в браузер, все они имеют одинаковое значение ?? Очень странно и трудно определить.
Есть предложения ??
Класс, который получает вид:
public class NominationStruct
{
public string NominationID; // unique ID in DB
public string NomineeLogin;
public string NominationReason;
public string NominationReasonWithBreaks;
public string NominatedBy;
public string NominationStatus;
}
А модель:
public class NominationsListViewModel
{
public IList<NominationRow> NominationRows { get; set; }
public string CurrentTab { get; set; }
}