ASP.NET MVC - 具有动态模型的RenderPartial

时间:2012-06-27 13:08:04

标签: asp.net-mvc asp.net-mvc-3 dynamic

我们有一个ViewModel,其集合为Widget<dynamic>

public class Widget<T>
{
    public string ViewName { get; set; }
    public T Data { get; set; }
}

在我们的视图中,我们遍历小部件集合并调用Html.Partial

@foreach (var widget in Model) {
    @Html.Partial(widget.ViewName, widget)
}

这可以提供部分具有动态模型或Widget<dynamic>的模型。

但是,我想在局部视图中智能感知,所以我给我的视图一个适当的小部件数据类型的模型,例如:

@model Widget<string>

不幸的是,当@Html.Partial将动态模型转换为System.Object时,会引发异常。

除了在局部内再次手动转换窗口小部件之外,还有一种方法可以在不将动态模型转换为对象的情况下调用Html.Partial吗?

1 个答案:

答案 0 :(得分:4)

创建一个接口,所有动态对象类型小部件都必须实现接口,我前一段时间做了同样的工作并且工作顺利

渲染的简单示例:(这只是一个必须完成的快速示例)

    public interface IWidget{

     public System.Web.Mvc.MvcHtmlString RenderMyWidget(HtmlHelper helper);

}




public class ContenidoWidgets : IWidget{

    private String Controller { get; set; }

    private String Action { get; set; }

    private Object Parms {get; set; }

    public ContenidoWidgets(String controller, String action, Object parms)
    {

        this.Controller = controller;
        this.Action = action;
        this.Parms = parms;

    }

    public System.Web.Mvc.MvcHtmlString RenderMyWidget(HtmlHelper helper){

        return System.Web.Mvc.Html.ChildActionExtensions.Action(helper, this.Action, this.Controller, this.Parms);

    }

观点......

@model IWidget

@model.RenderMyWidget(this.html);