Pregunta

Después de mucho buscar en Google, stackoverflowing (?) Y el blog-lectura todavía no puedo resolver completamente el problema. Esperemos que esta comunidad de expertos puede venir al rescate!

Teniendo en cuenta: Una clase de empresa con un ICollection campo (una empresa puede tener muchas direcciones). Cada dirección tiene unos campos de cadenas simples.

Versión corta:

Quiero que el usuario sea capaz de agregar cualquier número de direcciones de la empresa. En primer lugar quiero mostrar un conjunto de cuadros de texto Dirección y luego un botón "Añadir una dirección más". El Javascript es ningún problema, en lugar de la parte MVC. Si claro, la funcionalidad debe ser similar a éste: http://www.mdelrosso.com/sheepit/index.php?lng = es y sec = demo3

Qué necesito para utilizar la función MVC EditorForModel (), lo que significa que todas las necesidades de configuración para ir en editor de plantillas.

Estado hasta ahora:

  • Creado modelo de vista de la página de edición de empresa (CompanyViewModel)
  • Agregado [UIHint ( "Direcciones")] a las direcciones ámbito público ICollection {get; conjunto; }
  • Las direcciones Creado EditorTemplate

En las direcciones EditorTemplate, al agregar una nueva compañía, el modelo pasado es Null (sin sorpresas allí). ¿Cómo se crea el editor para la dirección adicional? Probé varias encarnaciones de (usando la maquinilla de afeitar):

@Html.EditorFor(m => new Address());

aint pero capaces de producir cualquier cosa, incluso trabajando a distancia. (La exacta encima de la línea da el error "plantillas sólo se puede utilizar con el acceso de campo, acceso a la propiedad, de una sola dimensión índice de matriz, o de un solo parámetro expresiones indizador personalizado.")

Gracias por cualquier punteros!

/ Victor

¿Fue útil?

Solución

Esta es una deficiencia de las API actuales. Una forma en que podría hacerlo es tener una acción de niño que es responsable de la generación de la forma de inserción

En el controlador:

[ChildActionOnly]
public ActionResult AddAddress() {
    return View(new Address()); // pass an instance so view works
}

Añadir una nueva visión AddAddress.cshtml

@model Address
@Html.EditorForModel()

A continuación, en su utilización editor de plantillas

@Html.Action("AddAddress")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top