ist es möglich, ein Objekt von einer stark typisierten Ansicht über Http-POST an den Controller zu senden, das nicht dem Typ des ursprünglichen Modells entspricht.ASP Net MVC - Senden eines anderen Modells an POST
Zum Beispiel:
Ich habe ein Ansichtsmodell wie folgt aus:
public class PersonsViewModel
{
List<PersonViewModel> persons { get; set; }
PersonsViewModel() { }
}
public class PersonViewModel
{
//some properties
Person() { }
}
Jetzt habe ich diese Ansicht:
@model PersonsViewModel
<div>
@for(int i = 0; i > Model.persons.Count; i++)
{
@Html.EditorFor(Model.persons[i])
}
</div>
Der Editor könnte wie folgt aussehen:
@model PersonViewModel
<div>
@using (Html.Beginform("Postaction","Controller", FormMethod.Post)){
<div>
<!-- properties and textboxes here + submit button -->
</div>
}
<div>
Die Steuerung r Aktion
[ValidateAntiForgeryToken]
[HttpPost]
public ActionResult Postaction(PersonViewModel model)
{
//do something
}
}
Das funktioniert nicht, weil es der Controller scheint ein PersonsViewModel Objekt erwartet. Meine bisherige Problemumgehung besteht darin, ein "großes" Formular zu erstellen, das alle PersonViewModel enthält und das vollständige PersonsViewModel an den Controller sendet.
Ist es irgendwie möglich, nur ein PersonViewModel an den Controller zu übergeben, obwohl die Ansicht stark typisiert ist?
Mit freundlichen Grüßen, Martin
Auf die erste Frage veröffentlichen können, ist die kurze Antwort NEIN (standardmäßig in MVC). Der ModelBinder vergleicht den Namen der Felder, die Sie übergeben haben, um eine Übereinstimmung mit dem Typ zu erzielen, den Sie in Ihrer Aktion angegeben haben. Sie sollten einen Blick auf benutzerdefinierte Modell-Binder: http://www.codeproject.com/Articles/605595/ASP-NET-MVC-Custom-Model-Binder –
Im Allgemeinen würden Sie die ID des PersonViewModel an den Controller senden, wo es würde dann eine Datenquelle abfragen, um das Datenobjekt abzurufen. –