24

私はこれに似たモデルを持っています:

public class myModel 
{
    public ClassA ObjectA {get; set;}
    public ClassB ObjectB {get; set;}
}

私のメイン ビューには、次のようなタグがあります。

<div id="section1">
    <%=Html.EditorFor(m => m.ObjectA)%>
</div>
<div id="section2">
    <%=Html.EditorFor(m => m.ObjectB)%>
</div>

ClassA と ClassB の両方に Editor テンプレートが定義されています。

section1 div をリロードするために Ajax 呼び出しを行う JavaScript をいくつか作成しました。アクション メソッドで ObjectA のエディター、EditorTemplates フォルダーにある ClassA.ascx を返すようにします。

Action メソッドには次のものがあります。

public ActionResult GetData(int input) 
{
    // Process input here and create modelData

    return PartialView("ClassA", modelData);
}

ClassA ビューが見つからないため、エラーが発生します。

私の解決策は、「GetData」と呼ばれる Views フォルダーに PartialView を作成することでした。私の戻り値は GetData ビューをレンダリングします。GetData ビューのコードは 1 行だけです。

<%=Html.RenderForModel()%>

これは機能しますが、アクション メソッドが戻り、エディター テンプレートを返す方法があるかどうか疑問に思っていましたか?

4

3 に答える 3

28

ギフトラッピングのポイント:

public class CustomControllerBase : Controller
{
    public PartialViewResult EditorFor<TModel>(TModel model)
    {
        return PartialView("EditorTemplates/" + typeof(TModel).Name, model);
    }

    public PartialViewResult DisplayFor<TModel>(TModel model)
    {
        return PartialView("DisplayTemplates/" + typeof(TModel).Name, model);
    }
}

コントローラー (たとえば、MyController と呼ばれる) に CustomControllerBase を継承させてから、次のようにします。

public ActionResult MyAction(int id)
{
    return EditorFor(new MyViewModel(id));
}

コードは「~/Views/MyController/EditorTemplates/MyViewModel.ascx」を探します。

于 2011-01-07T17:45:42.270 に答える
24
return PartialView("~/EditorTemplates/ClassA.ascx", modelData);
于 2010-03-03T18:53:51.473 に答える
2

これは私のために働いた(mvc 4

public ActionResult GetData(int input) 
{
    // Process input here and create modelData

    return PartialView("EditorTemplates/ClassA", modelData);
}
于 2015-05-28T06:26:42.040 に答える