2015-11-29 16 views
10

Ich habe eine Ansicht, in der ich Teilansicht in einer Schleife gerendert habe. Es gibt eine Liste und eine Teilansicht, die mit jedem Element in einer Liste verknüpft ist. Ich erhalte den Wert der Liste auf dem Controller nicht, nachdem der Wert eingegeben wurde.Listendaten im Controller anzeigen

Hier ist meine Ansicht:

<table id="resourceRequirement" class="table" width="100%" border="0"> 
    <thead> 
     <tr style="background-color:#dfdfdf;"> 
      <td><div align="center">PRIORITY</div></td> 
      <td><div align="center">SYSTEM RESOURCE/COMPONENT</div></td> 
      <td><div align="center">RECOVERY TIME OBJECTIVE</div></td> 
     </tr> 
    </thead> 
    <tbody> 
     @foreach (var item in Model.ResourceRequirement) 
     { 
      @Html.Partial("~/Views/Shared/_ResourceRequirement.cshtml", item) 
     } 
    </tbody> 
</table> 

Hier ist meine Teilansicht:

public List<ResourceRequirement> ResourceRequirement { get; set; } 

Und die Klasse hier:

@model DisasterManagementSystem.Models.BusinessImpactAnalysis.ResourceRequirement 
<tr> 
    <td> 
     @Html.TextBoxFor(m => m.priority)<br /> 
     <div style="color:red;"> 
      @Html.ValidationMessageFor(model => model.priority) 
     </div> 
    </td> 
    <td> 
     @Html.TextBoxFor(m => m.systemresource)<br /> 
     <div style="color:red;"> 
      @Html.ValidationMessageFor(model => model.systemresource) 
     </div> 
    </td> 
    <td> 
     @Html.TextBoxFor(m => m.receveryTime)<br /> 
     <div style="color:red;"> 
      @Html.ValidationMessageFor(model => model.receveryTime) 
     </div> 
    </td> 
</tr> 

Hier meine Liste ist

public class ResourceRequirement 
{ 
    [Required(ErrorMessage = "*")] 
    public string priority { get; set; } 

    [Required(ErrorMessage = "*")] 
    public string systemresource { get; set; } 

    [Required(ErrorMessage = "*")] 
    public string receveryTime { get; set; } 
} 

Bitte benachrichtigen, wenn ich versuche, die Liste von Modell auf Post zu bekommen Ich bekomme die Liste als null.

+0

Vielleicht ist die Controller-Aktion, die diese Ansicht gerendert keinen Wert im Modell liefern? –

+0

anfänglich leeres Formular wird nach dem Füllen der Details gerendert, es gibt keine Werte zurück. Zurückgeben nur Null –

+0

Können Sie auch den Controller-Code anzeigen? – levelonehuman

Antwort

7

Sie verwenden eine foreach Schleife und eine teilweise erzeugt name Attribute ohne Indexer duplizieren (so kann nicht auf eine Sammlung binden) und doppelte id Attribute (invalid html).

Verwenden Sie anstelle einer Teilansicht eine . Benennen Sie Ihre aktuelle Teilansicht auf ResourceRequirement.cshtml (dh den Namen der Klasse entsprechen) und legen Sie sie in den /Views/Shared/EditorTemplates Ordner (oder im /Views/yourController/EditorTemplates Ordner)

dann in der Hauptansicht, entfernen Sie die foreach Schleife und ersetzen sie durch

<tbody> 
    @Html.EditorFor(m => m.ResourceRequirement) 
</tbody> 

die EditorFor() Methode akzeptiert IEnumerable<T> und generiert den richtigen hTML-Code für jedes Element in Ihrer Sammlung. Wenn Sie die HTML-inspizieren, werden Sie sehen jetzt der richtige Name in dem Formular-Attribute steuert

<input type="text" name="ResourceRequirement[0].priority" .... /> 
<input type="text" name="ResourceRequirement[1].priority" .... /> 
<input type="text" name="ResourceRequirement[2].priority" .... /> 

etc., die zu Ihrem Modell binden, wenn Sie das Formular (vergleiche dies mit dem, was Ihr zur Zeit zu erzeugen)

+0

Was sollte mein Ordnerpfad für die Editorvorlage sein? Ich habe nicht Ihre Bedeutung von Zeile "/ Ansichten/Shared/EditorTemplates-Ordner (auf in der/Views/yourController/EditorTemplates-Ordner)" –

+0

Können Sie Anleitung, wie Sie eine Zeile in der obigen Tabelle mit jquery ?? Damit wir die Daten bekommen –

+0

Nehmen wir an, Ihr Controller heißt 'HomeController', dann kann er entweder im' Views/Shared/EditorTemplates/'Ordner oder im' Views/Home/EditorTempates/'Ordner sein.Die Ansichts-Engine sucht zuerst im reglerspezifischen Ordner nach 'EditorTemplates'. Wenn sie keine findet, sucht sie im Ordner' Shared'. Dies ermöglicht Ihnen, mehrere 'EditorTemplates' für jede Klasse zu haben. Benennen Sie es einfach um und verschieben Sie es in den Ordner '/ Views/Shared/EditorTemplates'. –

2

wie Sie Liste wollen nur in-Controller in der Ansicht übergeben werden, um die Liste durch eine Methode übergeben wie

public Actionresult List() 
{ 
    var search = from m in db.resourcerequirement select m; 
    return PartialView("_List",search.tolist()); 
} 

Danach in Teilansicht _List

Um zu zeigen, Teilansicht

@{Html.RenderAction("List", "ControllerName");}