質問

私はこれと同様のモデルを持っています:

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のは、エディタのテンプレートが定義されている両方ます。

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

私はアクションメソッドに次きます:

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

    return PartialView("ClassA", modelData);
}

それはにClassAビューを見つけることができないので、これはエラーになります。

私のソリューションは、「GetDataメソッド」と呼ばれるフォルダビューでPartialViewを作成することであったと私のリターンは、GetDataのビューをレンダリングします。

:GetDataのビューは、コードの一行だけを持っています
<%=Html.RenderForModel()%>

これは作業を行いますが、リターン、エディタテンプレートへのアクションメソッドへの道があった場合、私は不思議でしたか?

役に立ちましたか?

解決

return PartialView("~/EditorTemplates/ClassA.ascx", modelData);

他のヒント

ギフト包装のためのボーナスポイントます:

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);
    }
}

その後、CustomControllerBaseからコントローラ(と呼ばれる、と言う、MyController)継承を持って、そして:

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

コードは "〜/ビュー/ MyController / EditorTemplates / MyViewModel.ascx" を探しているされます。

これは私のために働いていた(のMVC 4 の)

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

    return PartialView("EditorTemplates/ClassA", modelData);
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top