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?!

Était-ce utile?

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
scroll top