La liaison de la variable de Modèle à une Méthode d'Action dans ASP.NET MVC3
J'ai un contrôleur de HomeController
avec le suivant action method
:
[HttpPost]
public ActionResult DisplayData(MyViewModel myViewModel)
{
//Do something with myViewModel
}
La ViewModel
:
public class MyViewModel
{
public string Name { get; set; }
public string Surname { get; set; }
public bool IsPeriod { get; set; }
}
Et suivants View
@model AppName.ViewModels.MyViewModel
@{ Html.RenderPartial("MyPartialView", Model); }
<img src="@Url.Action("DisplayData", "Home", new { myViewModel = Model })" alt="Image" />
- Je utiliser l'Url.L'Action de la façon dont il est décrit ici mais ce que j'obtiens dans le DisplayData méthode d'action est nulle. Dans le code source j'ai eu:
<img src="/Home/DisplayData?filters=AppName.ViewModels.MyViewModel" alt="Image" />
de sorte qu'il est de passage en fait le type, au lieu de les valeurs.
La ViewModel
la place est correctement transmis à la vue partielle. Ce que je fais mal?
OriginalL'auteur CiccioMiami | 2012-10-26
Vous devez vous connecter pour publier un commentaire.
Je l'habitude d'ajouter ce qui suit à mon modèle:
Alors il suffit d'utiliser la RouteValues bien dans votre Url.Action() de l'appel.
Ou si vous préférez moins (explicite) du code, ignorer les changements de modèle et de simplement faire ceci:
OriginalL'auteur nuVoid
Il ne sera pas sérialiser l'ensemble de votre objet à la chaîne de requête, vous devez définir la valeur de chaque explicitement, c'est à dire
Vous avez seulement besoin de fournir nameFilter si votre paramètre est pas appelé Nom de votre routage.
oui. mais vous pourriez penser à faire un post dans ce cas que c'est plus régulier OBTENIR qui est destiné à être idempotent. Dans un post, vous pouvez publier la totalité du modèle régulièrement. Si vous êtes fixé sur un GET, puis faire le ToString() comme @krajew4 suggère
notez que l'une est destinée à obtenir une entité et non pour effectuer une recherche, qui pourrait être un POST, à moins qu'ils sont des filtres qui toujours ramener les mêmes résultats.
OriginalL'auteur dove
Vous essayez de créer une img src lien à l'aide de l'ensemble d'un modèle de vue, je ne pense pas que ce soit vraiment ce que vous voulez.
Au lieu de cela, vous devez passer l'Id de ce que le modèle représente un paramètre de chaîne de requête sur le lien (filtres). Ainsi, par exemple, à l'aide de...
De rendre quelque chose comme...
Ensuite, vous pouvez utiliser l'Id de votre action à la regarder jusqu'à ce que la ressource est vous tentez d'afficher.
Aah, je vois. Le truc, c'est de l'Url.L'Action n'est pas conçu pour prendre un modèle en tant que paramètre. Vous pouvez également ajouter manuellement chaque modèle de champ comme un paramètre de route qui s'nommé correctement devrait lier à votre modèle avant que l'action s'exécute.
Donc, la meilleure solution est de créer un modèle de liaison personnalisé, n'est-ce pas?
Non, je ne vois vraiment pas comment cela pourrait aider. Le problème est dans la construction de votre URL, peu importe si vous personnalisé lier ou pas. Vous pouvez, d'autre part, de créer une Url personnalisée.L'Action de l'extension, qui parcourt tous les modèles de propriétés et les écrit dans la chaîne de requête.
OriginalL'auteur Justin Harvey
Si vous voulez passer du modèle de la façon dont vous avez décrit, alors vous devez surcharger la méthode ToString() de votre classe ViewModel, parce que c'est la raison pour laquelle la transmission de votre ViewModel objet de l'Url.Action méthode retourne un tel lien. Aussi, si vous souhaitez transmettre votre ViewModel à l'Action, vous devez préparer lien sous la forme de "http://url/Action?Name=x&Nom=y&IsPerion=0" de sorte ModelBinder de la reconnaître et de se lier à des paramètres d'Action.
OriginalL'auteur krajew4
Avez-vous essayé ce,
OriginalL'auteur VJAI