2

次のコレクションを持つ ViewModel がありWidget<dynamic>ます。

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

View では、ウィジェットのコレクションをループして を呼び出します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

インターフェイスを作成し、すべての動的オブジェクト タイプのウィジェットがインターフェイスを実装する必要があります。

render を使用した簡単な例: (完成させる必要がある簡単な例です)

    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 に答える