0

私は次のクラスを持っています:

public class Widget
{
    public string Name { get; set; }
}

汎用モデル

public class GenericModel<T>
{
    public List<T> Data { get; set; }
}

私のコントローラーのアクションは次のとおりです。

    public ActionResult Simple()
    {
        var model = new GenericModel<Widget>()
                        {
                            Data = new List<Widget>
                                       {
                                           new Widget {Name = "a"}
                                       }
                        };
        return View(model);
    }

そして私の見解は次のとおりです。

@model MyApp.GenericModel<MyApp.Widget>

@{
    ViewBag.Title = "Simple";
}

<h2>Simple</h2>
@Html.DisplayFor(m=>m)

Views/Shared/DisplayTemplate フォルダーに GenericModel.cshtml というファイルがあります。

@model MyApp.GenericModel<MyApp.Widget>

<ul>
@for (int i = 0; i < Model.Data.Count; i++ )
{
    <li>
    @Html.EditorFor(m=> Model.Data[i].Name)
    </li>
}
</ul>

このビューは見つかりません。モデルのタイプの名前を出力すると、「GenericModel 1". Seeing that, I renamed my template "GenericModel1.cshtml」が表示されます。これはハックのように思えます。これに頼らずにこの表示テンプレートを見つける簡単な方法はありますか?

4

1 に答える 1

0

ビュースタートで設定する必要があります:

@Code
    Layout = "~/Views/Shared/DisplayTemplate.cshtml"
End Code

注: 上記は VB です。

次のようにコントローラーを介して渡すこともできます。

public ActionResult Simple()
{
    var model = new GenericModel<Widget>()
                    {
                        Data = new List<Widget>
                                   {
                                       new Widget {Name = "a"}
                                   }
                    };
    return View("", "DisplayTemplate", model);
}
于 2012-09-11T13:24:55.223 に答える