2012-02-26 11 views
8

Usar el Editor Para las plantillas es una característica realmente agradable de ASP.Net MVC 3, pero ¿es posible hacer que EditorFor represente una plantilla despoblada para permitir la creación de registros?Usar Html.EditorPara crear un espacio en blanco para nuevos registros

¿O hay alguna otra forma de hacerlo?

Las formas en que estoy tratando de hacer esto es como sigue:

@Html.EditorFor(model => model) 
    @Html.EditorFor(x => new List<Business.ViewModel.Affiliate.Contact>()) 
    @Html.EditorFor(new List<Business.ViewModel.Affiliate.Contact>()) 
    @Html.EditorFor(new Business.ViewModel.Affiliate.Contact()) 

El primero funciona, obviamente, sin embargo las posteriores (lo que demuestra lo que yo estoy tratando de hacer) todo error con el siguiente de error:

Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions. 

El modelo en cuestión es:

IEnumerable<Business.ViewModel.Affiliate.Contact> 
+0

Puede crear su propia plantilla personalizada o simplemente crear una variable para el modelo vacío sobre la marcha: @ {var emptyModel = new Business.ViewModel.Affiliate.Contact();} @ Html.EditorFor (emptyModel) Si bien no es el más limpio, funciona –

Respuesta

6

Es responsabilidad del controlador preparar el modelo de vista que se pasará a la vista. Así que si usted necesita, por ejemplo, para inicializar su visión vista del modelo con 5 filas de contactos vacíos que podría hacer esto simplemente en su controlador:

public ActionResult Index() 
{ 
    var model = new MyViewModel 
    { 
     // Add 5 empty contacts 
     Contacts = Enumerable.Range(1, 5).Select(x => new Contact()).ToList() 
    }; 
    return View(model); 
} 

y en su opinión, los auxiliares de EditorFor como de costumbre:

@model MyViewModel 
... 
@Html.EditorFor(x => x.Contacts) 

Esto representará la plantilla de editor correspondiente para cada uno de los 5 elementos que hemos agregado a la colección Contacts.

+0

Voy a ir con esto como la respuesta, ya que es la solución que utilicé al final y también es una solución que tiene más sentido: el controlador debe preparar el modelo de vista exacto que la vista requiere para trabajar . – Moo

+0

PASÉ DÍAS BUSCANDO POR QUÉ MI PLANTILLA DE EDITOR NO SE RENDERÍA! ¡VUELVE TU CANT RENDER NULL! –

0

Si su pregunta no implica AJAX, entonces me gustaría diseñar el modelo de vista de la siguiente manera:

class MyList 
{ 
    public List<MyRow> Rows {get;set;} 
    public MyRow NewRow {get;set;} 
} 

Entonces usted puede agregar fácilmente un editor blanco atado a la propiedad NewRow. Y en el controlador agrega NewRow a Filas en llamadas posteriores.

Cuestiones relacionadas