2013-07-26 10 views
1

У меня есть следующие модели:список Pass обратно в контроллер

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> 

пользователь может выбрать файл Excel и файл данных с использованием типов ввода файлов html. Затем контроллер обрабатывает эти файлы и заполняет список номеров клубной карточки в списке в модели. Этот список затем отображается пользователю в div «DisplayCards». В пределах div «RunValidation» пользователь может выбрать флажки перед отправкой обратно на сервер. На данный момент мне нужен список ClubcardNumbers контроллера, который будет заполнен в модели, чтобы он мог обрабатываться действием RunValidation.

Может ли кто-нибудь предложить мне, как я могу это сделать?

ответ

5

Вы можете включить их в форме, как скрытые поля так, что они получают передаются в контроллер, когда эта форма представляется:

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

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

Спасибо, попробовал, но никакой разницы я боюсь. Когда я ссылаюсь на модель.ClubcardNumbers в действии RunValidation, счет равен 0. –

+0

Вы видите скрытые поля внутри вашей формы? Вы разместили их в правильной форме (тот, который вызывает действие «RunValidation»)? Они должны выглядеть так: ''. Также используйте FireBug для проверки точной загрузки запроса, отправляемой на сервер при отправке формы. Вы видите, какие значения отправляются? –

+0

Я схватил следующее сообщение с помощью Fiddler: FindCards = true & FindCards = false & FindDuplicates = false & AllocatedVouchers = false. Кажется, что скрытый список не передается, хотя я добавил код в представление: @using (Html.BeginForm («RunValidation», «Main»)) { для (var i = 0; i m.ClubcardNumbers [i]); }