我遇到了MVC 3.0的問題,它必須與我的代碼有關,但我一直在改變某人剛剛離開公司並且似乎已被擰緊的某人代碼我無法弄清楚的東西。我有一個控制器,它看起來像這樣:查看在MVC中填充相同值的隱藏字段
直接報告代理人
/// <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);
}
從數據庫類的Controllergathers,涉及到的用戶給定記錄的各種提名報告,並將其發送到下面查看
觀是這樣的:
<%@ 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循環,當帖子返回時,它們都是不同的,但到了瀏覽器時,它們都是相同的值?非常奇怪,很難說明問題。
有什麼建議?
該視圖是從得到的類是:
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; }
}