2012-09-24 57 views
0

我在過去的24小時內無法弄清楚這一點。我有一個模型,在其中填充了一個集合對象,並將數百個視圖添加到視圖中。一切呈現和帖子回來就好了,當我張貼表單回控制器列表TestExceptionDisplay是空/空。請幫助,這讓我瘋狂,我嘗試了幾種不同的方式,現在只是無知。模型中的列表集合不回發給控制器

基本上趨向於視圖的結尾有foreach循環,我在其中呈現 TestExceptionDisplay屬性,我確實維護表單集合的索引以便在後期選擇它,但無法使其始終爲空。它呈現得很好,並且每個項目都以正確的索引正確顯示。

public class RunLogEntryTestExceptionDisplay 
{ 
     public string Exception { get; set; } 

} 


@model RunLog.Domain.Entities.RunLogEntry 
@{ 
    ViewBag.Title = "Create"; 
    Layout = "~/Views/Shared/_Layout.cshtml"; 

} 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/errorCode.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/testexception.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/runLogEntry.js")" type="text/javascript"></script> 
<script type="text/javascript"> 
    var runlogListErrorsUrl = '@Url.Action("ListErrorCodes", "RunLogEntry")'; 
    var runlogTestExceptionUrl = '@Url.Action("ListTestExceptions", "RunLogEntry")'; 


</script> 
<fieldset> 
    <legend>Enter a new Run Log Entry</legend> 
    @using (Html.BeginForm("Create", "RunLogEntry", FormMethod.Post, new { enctype = "multipart/form-data" })) 
    { 
     @Html.ValidationSummary(true) 
     <div class="exception">@(ViewBag.ErrorMessage)</div> 
     <div class="bodyContent"> 
      <span class="leftContent">Load List File (Select): </span><span class="rightContent"> 
       <input type="file" name="file" id="file1" style="width: 500px" /> 
      </span> 
     </div> 
          if (Model.LoadListStoredFileName != null) 
          { 
     <div class="bodyContent"> 
      <span class="leftContent">Attached Load List: </span><span class="rightContent"> 
       @Html.ActionLink(Model.LoadListFileName, "Download", new { @file = Model.LoadListStoredFileName }) 
      </span> 
     </div> 
          } 
     <div class="bodyContent"> 
      <span class="leftContent">Output File (Select): </span><span class="rightContent"> 
       <input type="file" name="file" id="file2" style="width: 500px" /> 
      </span> 
     </div> 
          if (Model.OutputStoredFileName != null) 
          { 
     <div class="bodyContent"> 
      <span class="leftContent">Attached Output: </span><span class="rightContent"> 
       @Html.ActionLink(Model.OutputFileName, "Download", new { @file = Model.OutputStoredFileName }) 
      </span> 
     </div> 
          } 
     <div class="bodyContent"> 
      <span class="leftContent">Import Files: </span> 
      <button name="submit" class="art-button" type="submit" value="Upload" style="width: 100px"> 
       Upload</button> 
      <button name="submit" class="art-button" type="submit" value="Remove" style="width: 100px"> 
       Remove</button> 
     </div> 
     <div class="bodyContent"> 
      <span class="leftContent"> 
       @Html.Label("Operator") 
      </span><span class="rightContent"> 
       @Html.DropDownList("OperatorID", String.Empty) 
      </span> 
     </div> 
     <div class="bodyContent"> 
      <span class="leftContent"> 
       @Html.Label("Run ID") 
      </span><span class="rightContent">[Generated] </span> 
     </div> 
     <div class="bodyContent"> 
      <span class="leftContent"> 
       @Html.Label("Run Start Date/Time") 
      </span><span class="rightContent"> 
       @Html.EditorFor(model => model.RunDate) 
       &nbsp; 
       @Html.DropDownList("Hour", ListHelpers.HourList()) 
       : 
       @Html.DropDownList("Minute", ListHelpers.Minute15List()) 
       &nbsp; 
       @Html.DropDownList("AMPM", ListHelpers.AMPMList()) 
      </span> 
     </div> 
     <div class="bodyContent"> 
      <span class="leftContent"> 
       @Html.Label("System") 
      </span><span class="rightContent"> 
       @Html.DropDownList("SystemID", String.Empty) 
      </span> 
     </div> 
     <div class="bodyContent"> 
      <span class="leftContent"> 
       @Html.Label("Run Type") 
      </span><span class="rightContent"> 
       @Html.DropDownList("RunTypeID", String.Empty) 
      </span> 
     </div> 
     <div class="bodyContent"> 
      <span class="leftContent"> 
       @Html.Label("Run Description") 
      </span><span class="rightContent"> 
       @Html.TextAreaFor(model => model.RunDescription, new { style = "width: 600px; height=30px" }) 
      </span> 
     </div> 
     <div class="bodyContent"> 
      <span class="leftContent"> 
       @Html.Label("Assay Performance Issues") 
      </span><span class="rightContent"> 
       @Html.DropDownList("AssayPerformanceIssues1", ListHelpers.YesNoList()) 
      </span> 
     </div> 
     <div class="bodyContent"> 
      <span class="leftContent"> 
       @Html.Label("Tests/Cycles Requested") 
      </span><span class="rightContent"> 
       @Html.EditorFor(model => model.SPTestsRequested) 
      </span> 
     </div> 
     <div class="bodyContent"> 
      <span class="leftContent"> 
       @Html.Label("Tests/Cycles Completed") 
      </span><span class="rightContent"> 
       @Html.EditorFor(model => model.SPTestsCompleted) 
      </span> 
     </div> 
     <div class="bodyContent"> 
      <span class="leftContent"> 
       @Html.Label("Run Status") 
      </span><span class="rightContent"> 
       @Html.DropDownList("RunStatusID", String.Empty) 
      </span> 
     </div> 
     <div class="bodyContent"> 
      <span class="leftContent"> 
       @Html.Label("Assay") 
      </span><span class="rightContent"> 
       @Html.ListBoxFor(model => model.SelectedAssayIDs, new MultiSelectList(RunLog.Domain.Lists.GlobalList.AssayListItems(), "ID", "Name", Model.SelectedAssayIDs)) 
      </span> 
     </div> 
     <div class="bodyContent"> 
      <span class="leftContent"> 
       @Html.Label("Error Code") 
      </span><span class="rightContent"><span id="ChildDialogLink" class="treeViewLink">Click 
       here to Select Error Codes</span> 
       <br /> 
       <span id="ErrorCodeDisplay" style="cursor: pointer; text-decoration: underline;">@(Model.ErrorDescription)</span> 
       @Html.HiddenFor(model => model.ErrorDescription) 
      </span> 
     </div> 

     <div class="bodyContent"> 
      <span class="leftContent"> 
       @Html.Label("Test Exceptions") 
      </span><span class="rightContent"><span id="TestExceptionChildDialogLink" class="treeViewLink"> 
       Click here to View Test Exceptions</span> 
       <br /> 
       <span id="TestExceptionDisplay"></span></span> 
     </div> 

     <div class="bodyContent"> 
      <span class="leftContent"> 
       @Html.Label("Service Entry Request") 
      </span><span class="rightContent"> 
       @Html.DropDownList("ServiceRequest", ListHelpers.YesNoList()) 
      </span> 
     </div> 
     <div class="bodyContent"> 
      <span class="leftContent"> 
       @Html.Label("Problem Description") 
      </span><span class="rightContent"> 
       @Html.TextArea("ProblemDescription", new { style = "width: 600px; height: 30px" }) 
      </span> 
     </div> 
     <p> 
      <input id="LogType" type="hidden" value="Run" /> 
      <input id="ID" type="hidden" value="0" /> 
      @if (Model.ExitCode == "1") 
      { 
       @Html.Hidden("ExitCode", Model.ExitCode) 
      } 
      else 
      { 
       <input id="ExitCode" type="hidden" value='0' /> 
      } 
     </p> 

     <div id="testExceptiontreeview" title="Dialog Title" style="font-size: 10px; font-weight: normal; 
      overflow: scroll; width: 800px; height: 450px;"> 
      <div id="testExceptions"> 
      </div> 
      <div id="inputTestExceptions"> 
       <table class="grid" style="width: 450px; margin: 3px 3px 3px 3px;"> 
        <thead> 
         <tr> 
          <th> 
           Exception String 
          </th> 
          <th> 
           Comment 
          </th> 
         </tr> 
        </thead> 
        @{var index = 0;} 
        @if (Model.TestExceptionDisplay != null) 
        { 
         foreach (var p in Model.TestExceptionDisplay) 
         { 
         <tr> 
          <td> 
           @Model.TestExceptionDisplay[index].Exception 
           @Html.HiddenFor(model => model.TestExceptionDisplay[index].Exception) 
          </td> 
         </tr> 
          index++; 
         } 
        } 
       </table> 
      </div> 
     </div> 



     @Html.HiddenFor(model => model.MaxReplicateId) 
     @Html.HiddenFor(model => model.MinReplicateId) 
     @Html.HiddenFor(model => model.OutputFileName) 
     @Html.HiddenFor(model => model.OutputStoredFileName) 
     @Html.HiddenFor(model => model.LoadListFileName) 
     @Html.HiddenFor(model => model.LoadListStoredFileName) 
     @Html.HiddenFor(model => model.MinTestCompletionDate) 
     @Html.HiddenFor(model => model.MaxTestCompletionDate) 
@* @Html.HiddenFor(model => model.RunLogEntryTestExceptionDisplay)*@ 


     <div class="bodyContent"> 
      <span class="leftContent"></span><span class="rightContent"> 
       <button name="submit" class="art-button" type="submit" value="Create"> 
        Create</button></span> 
     </div> 
    } 
</fieldset> 
<script src="@Url.Content("~/Scripts/exitCode.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/exitCode.js")" type="text/javascript"></script> 
<div id="treeview" title="Dialog Title" style="font-size: 10px; font-weight: normal; 
    overflow: scroll; width: 800px; height: 450px;"> 
    <div id="errorCodes"> 
     @Html.RenderTree(CacheHelper.ErrorCodes(), ec => ec.Name, ec => ec.Children.ToList(), ec => (ec.ID).ToString(), null, "e") 
    </div> 
    <div id="inputReps" style="display: none;"> 
    </div> 
</div> 

回答

0

我相信你會更好讓MVC做實際的迭代和使用索引命名(如需要)在稍後的時間要綁定的發佈內容。

要做到這一點,我建議創建一個編輯器模板,並使用@Html.EditorFor(m => m.TestExceptionDisplay)

什麼都是在這裏完成的類似:MVC 3 - Editor template for List<> Model

,有你的編輯模板只呈現單個項目(意思是,它的模式將TestExceptionDisplay類型,而不是整個IEnumerable)。 MVC將爲您處理迭代,併爲每個項目正確編號。

+0

我做了一個編輯模板,它並呈現正常,但testexceptiondisplay名單仍然在崗位空到控制器 –

+0

@if(Model.TestExceptionDisplay!= NULL){ @ Html.EditorFor(M => m.TestExceptionDisplay) } –

+0

@model RunLog.Domain.Entities.RunLogEntryTestExceptionDisplay @ Html.DisplayFor(Model => Model.Exception) –

相關問題