2010-08-24 6 views
2

Oui, je sais que dans ASP.NET MVC vous devez utiliser ViewModels. Mais je suis fatigué d'écrire d'innombrables quantités de classes ViewModel. D'ailleurs, je voudrais juste passer le modèle de validation à la vue, au lieu de cela, je dois passer toute ViewModel, si je reçois le code laid commeASP.NET MVC: Passer des variables d'instance à la vue comme dans Ruby

Html.TextBoxFor(m => m.TopicModel.Title) 

Au lieu de

Html.TextBoxFor(m => m.Title) 

Je vraiment aimez Ro @instance_variables où vous venez de passer toutes les variables dont vous avez besoin sans créer de nouvelles classes pour cela.

Comment puis-je faire cela? Je pense que c'est impossible parce que j'ai tout essayé, même C# 4 dynamic.

Des idées?

Répondre

3

Vous pouvez utiliser le dictionnaire ViewData:

public ActionResult DoSomething() 
{ 
    ViewData["Message"] = "Hello World"; 
    return View(); 
} 

Accédé comme:

<%= ViewData["Message"] %> 

Vous pouvez également passer à l'utilisation dynamique:

<%@ Page Inherits="ViewPage<dynamic>" %> 

Je pense que cela devrait vous permettre de faire:

public ActionResult DoSomething() 
{ 
    return View(new { Message = "Hello" }); 
} 

accessible comme:

<%= Model.Message %> 

Parce que la dynamique sont résolus à l'exécution au lieu de la compilation, il devrait vous permettre de jeter un objet anonyme à la vue.

+0

Oui, j'ai aussi essayé. Mais vous ne pouvez pas utiliser des méthodes comme Html.TextBoxFor avec des modèles dynamiques. – Alex

0

Si vous n'aimez pas utiliser les modèles de vue, vous pouvez transmettre des modèles de domaine eux-mêmes. Pourquoi pas?

<%@ Page Inherits="ViewPage<TopicModel>" %> 

Html.TextBoxFor(m => m.Title) 
+0

Mais quand j'ai besoin d'objets supplémentaires pour passer, je dois créer une nouvelle classe ViewModel. Ce système est si maladroit dans ASP.NET. – Alex

+1

Ce n'est pas maladroit, son suggéré, il vous permet de séparer proprement vos modèles de vue, de vos modèles de domaine et de la présentation. Un objectif auquel de nombreux développeurs aspirent ... Quelle est votre objection à l'utilisation de modèles de vue? Vous pouvez découper beaucoup de code en utilisant quelque chose comme Automapper pour mapper entre votre modèle de vue et votre modèle de domaine. –

Questions connexes