Возвращая редакторов в качестве PartialView в результате действий

StackOverflow https://stackoverflow.com/questions/2374046

Вопрос

У меня есть модель, похожая на это:

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 оба имеют определенные шаблоны редактора.

Я создал какой-нибудь JavaScript, который делает вызов ajax для перезагрузки раздела1 div. Я хочу, чтобы метод действий вернуть редактор для Objecta, Classa.ascx, который находится в папке Editortemplates.

У меня есть следующее в моем методе действий:

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

    return PartialView("ClassA", modelData);
}

Это дает ошибку, потому что она не может найти представление Classa.

Мое решение было созданию PartialView в папке Views, называемой «getData», и мое возвращение рендерирует вид 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);
    }
}

У контролера (называемого, скажем, MyController) наследует от CustomControllerBase, а затем:

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

Код будет искать «~ / Views / mycontroller / Editortortemplates / 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