Подтвердить что ты не робот

Возврат элемента EditorTemplate в виде PartialView в результате действия - ASP.Net MVC 2

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

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 для перезагрузки div раздела1. Я хочу, чтобы метод action возвращал редактор ObjectA, ClassA.ascx, который находится в папке EditorTemplates.

В моем методе Action у меня есть следующее:

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

    return PartialView("ClassA", modelData);
}

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

Моим решением было создать PartialView в папке Views, называемой GetData, и мое возвращение отображает представление GetData. В представлении GetData имеется только одна строка кода:

<%=Html.RenderForModel()%>

Это работает, но мне было интересно, есть ли способ возврата метода action и шаблон редактора?

Благодаря любым предложениям, которые вы можете предоставить.

4b9b3361

Ответ 1

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

Ответ 2

Бонусные баллы за подарочную упаковку:

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".

Ответ 3

это сработало для меня (mvc 4)

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

    return PartialView("EditorTemplates/ClassA", modelData);
}