Domanda

Ho un modello simile a questo:

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

A mio avviso principale, devo tag simili a questo:

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

ClassA e ClassB entrambi hanno Editor modelli definiti.

ho creato un po 'di JavaScript che effettua una chiamata Ajax per ricaricare il div section1. Voglio che il metodo di azione per restituire l'editor per Objecta, ClassA.ascx che si trova nella cartella EditorTemplates.

Ho il seguente nel mio metodo di azione:

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

    return PartialView("ClassA", modelData);
}

Questo dà un errore perché non riesce a trovare la vista ClassA.

La mia soluzione è stata quella di creare un PartialView nei Visualizzazioni cartella chiamata "GetData" e il mio ritorno rende la vista GetData. La vista GetData ha una sola riga di codice:

<%=Html.RenderForModel()%>

Questo funziona, ma mi chiedevo se ci fosse un modo per un metodo di azione per il ritorno e editor di modelli?

È stato utile?

Soluzione

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

Altri suggerimenti

I punti di bonus per confezioni regalo:

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

Avere il controllore (chiamato, per esempio, MyController) eredita da CustomControllerBase, e poi:

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

Il codice sarà alla ricerca di "~ / Vista / MyController / EditorTemplates / MyViewModel.ascx".

questo ha funzionato per me ( MVC 4 )

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

    return PartialView("EditorTemplates/ClassA", modelData);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top