2013-07-26 2 views
1

에 나는 다음과 같은 모델을했다 : 내 컨트롤러에서 다음 작업패스 목록 다시 컨트롤러

public List<string> Results { get; set; } 
    public List<string> ClubcardNumbers { get; set; } 
    public bool FindCards {get; set;} 
    public bool FindDuplicates { get; set; } 
    public bool AllocatedVouchers { get; set; } 

있다 : 여기

public ActionResult ImportExcel() 
    { 


     if (Request.Files["XlFileUpload"].ContentLength > 0) 
     { 
      string extension = System.IO.Path.GetExtension(Request.Files["XlFileUpload"].FileName); 
      string path1 = string.Format("{0}/{1}", Server.MapPath("~/Content/Upload"), Request.Files["XlFileUpload"].FileName); 
      if (System.IO.File.Exists(path1)) 
       System.IO.File.Delete(path1); 

      Request.Files["XlFileUpload"].SaveAs(path1); 
      Session.Add("XlFileUpload", path1); 

     } 

     if (Request.Files["DataFileUpload"].ContentLength > 0) 
     { 
      string extension = System.IO.Path.GetExtension(Request.Files["DataFileUpload"].FileName); 
      string path1 = string.Format("{0}/{1}", Server.MapPath("~/Content/Upload"), Request.Files["DataFileUpload"].FileName); 
      if (System.IO.File.Exists(path1)) 
       System.IO.File.Delete(path1); 

      Request.Files["DataFileUpload"].SaveAs(path1); 
      Session.Add("DataFileUpload", path1); 

     } 

     MvcUI2.Models.Main model = new Models.Main(); 
     model.ClubcardNumbers = GetCardNumbers(); 
     return View("Main", model); 
    } 

    [HttpPost] 
    public ActionResult RunValidation(Models.Main model) 
    { 
     //determine which validations checks to run 
     if (model.FindCards) 
     { 
      FileReader.UnitTests.pronc_vas ut = new FileReader.UnitTests.pronc_vas(); 

      ut.FileToCheck = Session["XlFileUpload"].ToString(); 

      foreach (string cn in model.ClubcardNumbers) 
      { 
       ut.ClubcardNumberUnderTest = cn.Split('\t')[0]; 
       ut.ClubcardNumberFound(); 

       //add results to a list to be read by DisplayResults Action 
       if (ut.Result) 
        model.Results.Add("PASSED - " + cn + " - " + "Find card number"); 
       else 
        model.Results.Add("FAILED - " + cn + " - " + "Find card number"); 

      } 
     } 

     return View("Main", model); 
    } 

내이다 :

<div id="body"> 
    <div id="ImportExcel"> 
     <h2>Import</h2> 
     @using (Html.BeginForm("ImportExcel", "Main", FormMethod.Post, new { enctype = "multipart/form-data" })) 
     { 
      <table> 
       <tr> 
        <td>Excel file</td> 
        <td> 
         <input type="file" id="XlFileUpload" name="XlFileUpload" /></td> 
       </tr> 

       <tr> 
        <td>Data file</td> 
        <td> 
         <input type="file" id="DataFileUpload" name="DataFileUpload" /></td> 
       </tr> 
       <tr> 
        <td></td> 
        <td> 
         <input type="submit" id="Submit2" name="Submit" value="Submit" /></td> 
       </tr> 
      </table> 
     } 
    </div> 


    <div id="DisplayCards"> 
     DisplayCards div 
     <ul> 
      @foreach (var item in Model.ClubcardNumbers) 
      { 
       <li> 
        @item 
       </li> 
      } 
     </ul> 
    </div> 

    <div id="RunValidation"> 
     @using (Html.BeginForm("RunValidation", "Main")) 
     { 
      <table> 
       <tr> 
        <td> 
         @Html.CheckBoxFor(m => m.FindCards) 
         Find Cards 
        </td> 
       </tr> 

       <tr> 
        <td> 
         @Html.CheckBoxFor(m => m.FindDuplicates) 
         Find Duplicates 
        </td> 
       </tr> 

       <tr> 
        <td> 
         @Html.CheckBoxFor(m => m.AllocatedVouchers) 
         Check Voucher Allocation 
        </td> 
       </tr> 


       <tr> 
        <td></td> 
        <td> 
         <input type="submit" value="SubmitValidation" /></td> 
       </tr> 
      </table> 
     } 
    </div> 


    <div id="DisplayResults"> 
     <ul> 
      @foreach (var result in Model.Results) 
      { 
       <li> 
        @result 
       </li> 
      } 
     </ul> 
    </div> 

사용자는 html 파일 입력 유형을 사용하여 Excel 파일과 데이터 파일을 선택할 수 있습니다. 그런 다음 컨트롤러는 이러한 파일을 처리하고 클럽 카드 번호 목록을 모델 내의 목록에 채 웁니다. 이 목록은 div "DisplayCards"의 사용자에게 표시됩니다. div "RunValidation"내에서 사용자는 서버에 다시 게시하기 전에 확인란을 선택하는 옵션을 갖습니다. 이 시점에서 RunValidation 작업에 의해 처리 될 수 있도록 모델에 채워지는 컨트롤러의 ClubcardNumbers 목록이 필요합니다.

아무도 내가 이것을 할 수있는 방법을 제안 할 수 있습니까? 이 양식이 제출 될 때 컨트롤러에 전달받을 수 있도록

답변

5

당신은 숨겨진 필드로 양식에 포함 할 수 :

@using (Html.BeginForm("RunValidation", "Main")) 
{ 
    @for (var i = 0; i < Model.ClubcardNumbers.Count; i++) 
    { 
     @Html.HiddenFor(x => x.ClubcardNumbers[i]) 
    } 

    <table> 
     ... 
    </table> 
} 
+0

덕분에, 그것을 시도했지만 아무런 차이가 난 두려워하지 않는다. RunValidation 액션에서 model.ClubcardNumbers를 참조하면 개수가 0입니다. –

+0

양식 안의 숨겨진 필드를 볼 수 있습니까? 올바른 형태 (RunValidation 액션을 호출하는 폼)에 넣었습니까? 그들은 다음과 같이 보일 것입니다 :''. 또한 양식을 제출할 때 FireBug를 사용하여 서버에 보내지는 정확한 요청 페이로드를 검사하십시오. 전송 된 값을 볼 수 있습니까? –

+0

나는 Fiddler를 통해 게시물에서 다음을 포착했다 : FindCards = true & FindCards = false & FindDuplicates = false & AllocatedVouchers = false. 뷰에 코드를 추가 했더라도 숨겨진 목록이 전달되지 않는 것 같습니다. @using (Html.BeginForm ("RunValidation", "Main")) { for (var i = 0; i m.ClubcardNumbers [i]); }