2011-10-03 1 views
0

MVC 3.0에서 내 코드와 관련이있는 문제가 발생했지만 회사를 떠난 사람이 코드를 수정하여 실수 한 것으로 보입니다 내가 알아 내지 못하는 무언가. I는 다음과 같습니다 컨트롤러가 있습니다숨겨진 필드를 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 A는 로그인 한 사용자 주어진 관련 다양한 후보가보고를하고 아래보기

로 전송

은보기는 다음과 같습니다

<%@ 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에 오류가 없습니다. 나는 포스트가 돌아 왔을 때 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; } 
    } 

답변

관련 문제