2

我们有一个 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不将动态模型转换为对象的情况下进行调用?

4

1 回答 1

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);
于 2012-06-27T13:36:49.637 回答