Pergunta

Eu tenho um modelo semelhante a este:

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

Na minha visão principal, tenho tags semelhantes a esta:

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

Classa e Classb têm modelos de editor definidos.

Criei um JavaScript que faz uma chamada de Ajax para recarregar a seção1 div. Quero que o método de ação retorne o editor do Objecta, Classa.ascx que está na pasta EditorTemplates.

Eu tenho o seguinte no meu método de ação:

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

    return PartialView("ClassA", modelData);
}

Isso dá um erro porque não consegue encontrar a visualização da Classa.

Minha solução foi criar uma visualização parcial na pasta Views chamada "getData" e meu retorno renderiza a visualização getData. A visualização getData tem apenas uma linha de código:

<%=Html.RenderForModel()%>

Isso funciona, mas eu queria saber se havia uma maneira de um método de ação retornar e modelo de editor?

Foi útil?

Solução

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

Outras dicas

Pontos de bônus para embalagem de presentes:

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

Tenha o controlador (chamado, digamos, MyController) herdado da CustomControllerBase e depois:

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

O código estará procurando "~/views/mycontroller/editorTemplates/myViewModel.ascx".

Isso funcionou para mim (MVC 4)

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

    return PartialView("EditorTemplates/ClassA", modelData);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top