J'ai un lien comme celui-ci:
<a href='Member/MemberHome/Profile/Id'><span>Profile</span></a>
et quand je clique dessus, il appellera cette page partielle:
@{
switch ((string)ViewBag.Details)
{
case "Profile":
{
@Html.Partial("_Profile"); break;
}
}
}
La page partielle _Profile contient:
Html.Action("Action", "Controller", model.Paramter)
Exemple:
@Html.Action("MemberProfile", "Member", new { id=1 }) // id is always changing
Mon doute est que comment puis-je transmettre cet "Id" à la partie model.parameter ?
Mes contrôleurs sont:
public ActionResult MemberHome(string id)
{
ViewBag.Details = id;
return View();
}
public ActionResult MemberProfile(int id = 0)
{
MemberData md = new Member().GetMemberProfile(id);
return PartialView("_ProfilePage",md);
}
Réponses:
Votre question est difficile à comprendre, mais si j'obtiens l'essentiel, vous avez simplement une valeur dans votre vue principale à laquelle vous souhaitez accéder dans un rendu partiel dans cette vue.
Si vous effectuez juste un rendu partiel avec juste le nom partiel:
Il passera en fait votre modèle en tant que paramètre implicite, comme si vous deviez appeler:
Maintenant, pour que votre partiel puisse réellement l'utiliser, il doit également avoir un modèle défini, par exemple:
Alternativement, si vous avez affaire à une valeur qui ne fait pas partie du modèle de votre vue (c'est dans le ViewBag ou une valeur générée dans la vue elle-même d'une manière ou d'une autre, vous pouvez passer un
ViewDataDictionary
Puis:
Comme pour le modèle, Razor transmettra implicitement à votre partiel la vue
ViewData
par défaut, donc si vous en aviezViewBag.Id
dans votre vue, vous pouvez référencer la même chose dans votre partiel.la source
@Html.Partial("_SomePartial", new Microsoft.AspNet.Mvc.ViewFeatures.ViewDataDictionary(this.ViewData) { { "id", someInteger } });
pour que cela fonctionne pour moi. J'utilise VS2015 DNX 4.5.1 si quelqu'un d'autre a ce même problème.L'une des méthodes les plus courtes que j'ai trouvées pour une valeur unique pendant que je cherchais moi-même, consiste simplement à passer une chaîne unique et à définir une chaîne comme modèle en vue comme ceci.
Dans votre côté appel partiel
Et puis lier le modèle avec vue partielle comme ceci
et l'utilisation de sa valeur dans la vue partielle comme ceci
Vous pouvez également jouer avec d'autres types de données comme array, int ou des types de données plus complexes comme IDictionary ou autre.
J'espère que ça aide,
la source
NullReferenceException
référence d'objet non définie sur une instance d'un objet, cela signifie queModel
c'est nul. Des idées?Voici une méthode d'extension qui convertira un objet en ViewDataDictionary.
Vous pouvez ensuite l'utiliser dans votre vue comme ceci:
Ce qui est bien plus agréable que la
new ViewDataDictionary { { "Property1", "Value1" } , { "Property2", "Value2" }}
syntaxe.Ensuite, dans votre vue partielle, vous pouvez utiliser
ViewBag
pour accéder aux propriétés à partir d'un objet dynamique plutôt que des propriétés indexées, par exemplela source
ToViewDataDictionary
méthode statique? Partout où j'essaie de le mettre, j'obtiens une sorte d'erreur de compilation.Pour Asp.Net core, mieux vaut utiliser
Donc par exemple
la source