ViewData.Model in partial est null
-
04-07-2019 - |
Question
Sur ma page principale (appelez-la index.aspx
), j'appelle
<%Html.RenderPartial("_PowerSearch", ViewData.Model);%>
Ici le viewdata.model! = null
Quand j'arrive à mon partiel:
<%=ViewData.Model%>
Dit viewdata.model == null
Qu'est-ce qui donne?!
La solution
Avez-vous essayé de passer juste ViewData au lieu de ViewData.Model? Voici une version abrégée de ce que j’utilise dans mes aides (volée sans vergogne dans la série Storefront):
/// <summary>
/// Renders a LoggingWeb user control.
/// </summary>
/// <param name="helper">Helper to extend.</param>
/// <param name="control">Type of control.</param>
/// <param name="data">ViewData to pass in.</param>
public static void RenderLoggingControl(this System.Web.Mvc.HtmlHelper helper, LoggingControls control, object data)
{
string controlName = string.Format("{0}.ascx", control);
string controlPath = string.Format("~/Controls/{0}", controlName);
string absControlPath = VirtualPathUtility.ToAbsolute(controlPath);
if (data == null)
{
helper.RenderPartial(absControlPath, helper.ViewContext.ViewData);
}
else
{
helper.RenderPartial(absControlPath, data, helper.ViewContext.ViewData);
}
}
Notez que je transmets le ViewData actuel et non le modèle.
Autres conseils
Ceci n'est pas testé:
<%=Html.RenderPartial("_ColorList.ascx", new ViewDataDictionary(ViewData.Model.Colors));%>
Votre vue de contrôle attend des données de vue qui lui sont spécifiques dans ce cas. Si votre contrôle veut une propriété sur le modèle appelée Colors, alors peut-être:
<%=Html.RenderPartial("_ColorList.ascx", new ViewDataDictionary(new { Colors = ViewData.Model.Colors }));%>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow