2011-10-03 71 views
0

我遇到了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; } 
    } 

回答