Wie zu verwenden ViewModels in ASP.NET MVC?
Ich habe gerade angefangen zu lernen über ViewModels in ASP.NET MVC. So, ich dachte, der Implementierung eines Beispiel wie folgt:
Unternehmen
public class AddModel
{
public int a { get; set; }
public int b { get; set; }
public int Add()
{
return (this.a + this.b);
}
}
Hinzufügen ViewModel
public class AddViewModel
{
public AddModel addModel;
public int Total { get; set; }
}
Controller
public class AddController : Controller
{
[HttpPost]
public JsonResult Add(AddViewModel model)
{
int iSum = model.addModel.a + model.addModel.b;
model.Total = iSum;
return Json(model);
}
public ActionResult Index()
{
return View();
}
}
Ansicht Umsetzung
@model ViewModelApplication.AddViewModel
<script type="text/javascript" src="../../Scripts/MicrosoftAjax.js"></script>
<script src="../../Scripts/MicrosoftMvcAjax.debug.js" type="text/javascript"></script>
<script type="text/javascript">
function Callback(data) {
alert("I am sucess call");
}
function Failed() {
alert("I am a failure call");
}
</script>
@using (Ajax.BeginForm("Add", "Add", new AjaxOptions { OnSuccess = "Callback", OnFailure = "Failed" }))
{
<table align="center">
<tr>
<td class="tdCol1Align">
<label>
Number1</label>
</td>
<td class="tdCol2Align">
@Html.TextBoxFor(Model => Model.addModel.a)
</td>
</tr>
<tr>
<td class="tdCol1Align">
<label>
Number2</label>
</td>
<td class="tdCol2Align">
@Html.TextBoxFor(Model => Model.addModel.b)
</td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="Add" class="button" />
</td>
</tr>
</table>
}
Hier das problem, dass ich nicht in der Lage zum abrufen der eingegebenen Werte in die Textfelder, wenn der Add
button geklickt werden; das entsprechende AJAX-Aktion wird es.
Wenn ich versuche auf die Werte von a
und b
bekomme ich null anstelle der eingegebenen Werte in die Textfelder eingeben.
Ich bin mir nicht sicher, wohin ich gehe falsch. Bitte helfen Sie.
- Sehen Sie die erwarteten Werte in die Formular-Sammlung? Ich bin mir nicht ganz sicher, aber da Ihr tun eine AJAX-postback ich glaube, dass Sie model ist, die serialisiert werden, wenn Sie ein postback. Die Steuerung kann nicht erkennen, daß es mehr als ein viewmodel, sondern sieht es als eine Sammlung von geposteten Werte. Aber nochmal, ich bin nicht sicher, ob dies ist, was passiert ist..
- ich konnte sehen, wie die Werte in die Formular-Sammlung
- Im Allgemeinen ist es nicht eine gute Idee, um das Modell als Teil des ViewModel.
- Stimme mit dir..aber was ist die alternative zu ihm..
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre view-Modell sollte wie folgt Aussehen
und in der cshtml
in der Steuerung
Bearbeiten
View-Modell gibt es zum Rendern Ihrer Ansichten keine Stelle keine Logik darin enthalten ist. wenn Sie komplexere Modell, dann wird es schwer sein, um die Karte
Model
mitViewModel
. für diese können Sie verwenden, AutoMapper oder ValueInjector für die Zuordnung zwischen Modell-und view-Modell.link für automapper http://automapper.codeplex.com/
link für Wert Injektor http://valueinjecter.codeplex.com/
hoffe, das hilft
Sollten Sie nicht verwenden die Domäne (business -) Entitäten, die in Ihrer view-Modell. Wenn Sie tun, ein view-Modell ist ziemlich nutzlos, da es Standbilder enthält die business-Logik, die Sie vielleicht nicht wollen, in den Blick. Das Modell in deinem Beispiel nicht wirklich stellen eine echte-Welt-Szenario, ein view-Modell ist nicht wirklich notwendig für Sie sowieso.
Eine weitere häufige und triviale Beispiel einer view-Modell ist ein login-Formular: Sie haben wahrscheinlich ein Domänen-Modell genannt
User
und Sie wollen, dass Sie, um sich anzumelden. DieUser
domain-Modell ist groß und nur ein kleiner Teil wird benötigt für die Authentifizierung. Es enthält auch die Validierungslogik für die Datenbank, die Sie stellen nicht Validierungslogik für das login-Formular.Den
User
domain-Modell:Den oben genannten Domänen-Modell stellt die Datenbank Tabelle somit mit Validierungslogik, um sicherzustellen Integrität.
View-Modell oben enthält nur die Eigenschaften, die wir benötigen für das login-Formular und hat es ist eigenes Daten-Anmerkungen. Dies hilft, Sie sauber zu trennen, view-Logik und business - /Daten-Logik.