2016-11-24 3 views
0

Gibt es eine Möglichkeit, ein Modellobjekt aus der Ansicht in den Controller zu erhalten, ohne stark typisierte HTML-Helfer zu verwenden. Die Sicht verwendet die Entität Account. Sie müssen jedoch das Formular bereitstellen und die Kontoentität der Variablen abrufen, die in einer foreach-Schleife ausgeführt wird, die zum Generieren der Tabelle/des Gitternetzwerks verwendet wird. Die Information aus dem Dropdown wird für eine andere Entität verwendet, weshalb sie nicht stark typisiert ist.So rufen Sie mehrere Modelle aus der Einzelansicht ab

public class HomeController : Controller 
{ 
    // GET: Home 
    ModelContext model = new ModelContext(); 


    [HttpGet] 
    public ActionResult Index() 
    { 


     return View(model.accounts.ToList()); 
    } 

    [HttpPost] 
    public ActionResult Index(Account account,List<string> status,string name) 
    { 
     // return student object 
     return View(); 
    } 
} 

Der Rest des Codes in der Ansicht wird auf einem foreach Schleife eine HTML-table in ein @HTML.BeginForm

<td> 

     @Html.DropDownList("status", 
     new SelectList(Enum.GetValues(typeof(ProjectName.Models.Code))), 
     "...", 
     new { @class = "form-control" }) 

</td> 

<td> 
    @Html.TextArea("comment"); 
</td> 
+0

Ihre 'DropDownList()' Methode gibt nur einen einzigen Wert zurück, so dass der Parameter 'string status' sein muss (nicht' List status'). Aber nachdem Sie das gesagt haben, sollten Sie das Ansichtsmodell verwenden, das alle gewünschten Eigenschaften in der Ansicht enthält, damit Sie es stark binden, Validierung erhalten können. –

+0

Es gibt ein Array von Eingaben zurück, weil es in einer foreach-Schleife läuft –

+0

Dann generieren Sie Ungültige HTML für einen Start! Und Sie brauchen definitiv ein View-Modell, um das richtig zu handhaben. –

Antwort

1

Sie sollten eine übergeordnete Ansicht Modell erstellt werden beide dieser Ansicht enthält eingeschlossen zu erzeugen, Modelle, die aus Ihrer Sicht benötigt werden. Zum Beispiel:

public class ViewModel 
{ 
    public ProjectName.Models.Code Code {get; set;} 
    public ProjectName.Models.Account Account {get; set;} 
} 

Außerdem haben Sie bitte einen Blick MVC - Multiple models in a view. Ich denke, es ist gut für dich.

Hoffe diese Hilfe!

Verwandte Themen