Comment utiliser Viewmodel dans ASP.NET MVC?
J'ai juste commencé à apprendre à propos Viewmodel dans ASP.NET MVC. Donc, j'ai pensé à la mise en œuvre d'un échantillon de exemple comme ci-dessous:
Entité Commerciale
public class AddModel
{
public int a { get; set; }
public int b { get; set; }
public int Add()
{
return (this.a + this.b);
}
}
Ajouter ViewModel
public class AddViewModel
{
public AddModel addModel;
public int Total { get; set; }
}
Contrôleur
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();
}
}
Vue De La Mise En Œuvre
@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>
}
Le problème ici est que je n'arrive pas à récupérer les valeurs saisies dans les zones de texte à chaque fois que le Add
bouton est cliqué; AJAX d'action est en cours.
Lorsque j'essaie d'accéder aux valeurs de a
et b
, j'obtiens des valeurs null à la place des valeurs saisies dans les zones de texte.
Je ne suis pas sûr de l'endroit où je vais mal. S'il vous plaît aider.
Voyez-vous les valeurs attendues dans le formulaire de collecte? Je ne suis pas tout à fait sûr, mais puisque vous faites un AJAX-publication, je crois que vous modèle est sérialisé lorsque vous effectuez une publication. Le contrôleur peut ne pas le reconnaître plus comme un viewmodel, mais il voit comme une collection de valeurs envoyées. Mais encore une fois, je ne suis pas sûr que c'est ce qui se passe..
je pouvais voir les valeurs dans le formulaire de collecte de
En général, il n'est pas une bonne idée d'inclure le Modèle dans le cadre de la ViewModel.
d'accord avec vous..mais quelle est l'alternative à ça..
je pouvais voir les valeurs dans le formulaire de collecte de
En général, il n'est pas une bonne idée d'inclure le Modèle dans le cadre de la ViewModel.
d'accord avec vous..mais quelle est l'alternative à ça..
OriginalL'auteur Sai Avinash | 2013-12-02
Vous devez vous connecter pour publier un commentaire.
votre point de vue modèle devrait ressembler à ceci
et dans le cshtml
dans le contrôleur
Modifier
Modèle de vue, il est là pour rendre votre point de vue ne place pas de logique à l'intérieur. si vous avez des modèle plus complexe, alors il sera difficile de carte
Model
avecViewModel
. pour cela, vous pouvez utiliser AutoMapper ou ValueInjector pour le mapping entre le modèle et le modèle de vue.lien pour automapper http://automapper.codeplex.com/
lien pour la valeur de l'injecteur http://valueinjecter.codeplex.com/
espère que cette aide
si vous avez plus de champs de voir mon jour de réponse.
OriginalL'auteur Anto Subash
Vous ne devriez pas utiliser le domaine (entreprises) d'entités dans votre modèle de vue. Si vous le faites, un modèle de vue est assez inutile depuis toujours qu'elle contient la logique d'entreprise qui vous ne voudriez pas dans la vue. Le modèle dans votre exemple n'est pas vraiment représenter un monde réel scénario, un modèle de vue n'est pas vraiment nécessaire pour cela de toute façon.
Plus commune et triviale exemple d'un modèle de vue est un formulaire de connexion: Vous avez probablement un modèle de domaine appelé
User
et vous souhaitez vous connecter. LeUser
modèle de domaine peut être grand et juste une petite partie de cela est nécessaire pour l'authentification. Il contient également de la logique de validation de la base de données qui ne représente pas la logique de validation pour le formulaire de connexion.La
User
modèle de domaine:Le domaine ci-dessus modèle représente la table de base de données contenant donc logique de validation pour s'assurer de l'intégrité.
Le modèle de vue ci-dessus contient les propriétés dont nous avons besoin pour le formulaire de connexion et possède ses propres annotations de données. Cela vous permet de séparer proprement vue et la logique de données/de la logique.
mon exemple , le modèle de lecture peut être nécessaire dans le cas où nous ne voulons pas créer d'objet anonyme lors de l'envoi de résultats à afficher(Exemple - total dans mon scénario)
oui, parfois, les modèles de vue sont une copie de modèles de domaine, mais habituellement, ils contiennent d'autres attributs de validation et contiennent des annotations de données pour l'affichage des noms etc. Mon expérience personnelle est que j'ai toujours des ennuis lors de l'utilisation de modèles de domaine de mon point de vue.
avec un modèle de domaine simple comme dans votre exemple, vous l'utiliser directement dans votre point de vue. En d'autres termes: ce n'est pas un bon test pour pratiquer avec les modèles de vue et de comprendre pourquoi vous en avez besoin.
OriginalL'auteur Henk Mollema