Pregunta

Tengo una aplicación ASP.NET MVC. En cierto punto, obtengo una colección de formulaciones en un método de controlador que quiero usar para actualizar un modelo. En la colección, no todos los valores son propiedades de ese modelo y la propiedad a actualizar es un elemento de una lista, y esa lista también es un elemento de otra lista. Algo como esto (espero que esto esté claro):

propertyToUpdate --> model.Items[0].Subitems[0].SomePropertyClass.Value;

Probé esto en mi controlador:

UpdateModel(model);

El problema es que esto no funciona y supongo que tiene algo que ver con el hecho de que la reflexión no funciona. Fui buscando y tropezé con Este artículo. Así que entiendo que usar el parámetro prefijo resuelve el problema. Pero no en mi caso, ya que las propiedades se encuentran "más profundas" en el modelo como elementos de una lista.

¿Alguien sabe cómo puedo resolver esto?

Actualizar:

Aquí está la edición de EmitorteMplate para la propiedad:

@model Q95.Domain.Property

<li>
    @Html.DisplayFor(p => p.Description) : 
    @Html.DisplayFor(p => p.Quantity.Value)
    @Html.DisplayFor(p => p.Quantity.Unit.Description)
    <br />
    @Html.TextBoxFor(p => p.Quantity.Value)
</li>

Esta plantilla se llama así:

<ul>
    @Html.EditorFor(model => model.SegmentRequirement.MaterialRequirements[j].Properties)
</ul>

¿Es este suficiente código o todavía falta algo?

Actualización2:

Ok, en todas las subpropericciones definí constructores sin parámetros y ahora llamo:

UpdateModel(segmentRequirement, "SegmentRequirement", form.ToValueProvider());

Esto actualiza el modelo, pero todo, desde materiales reinstanciales, se reinstancia ...: S

¿Fue útil?

Solución

UpdateModel funciona bien en "Propiedades profundas".
El problema es probablemente los datos en la colección que obtiene no son iguales a los nombres de propiedades.
Verifique 3 lugares para ver los valores que obtiene de la página

  1. Los valores de formulario.

  2. Los datos de la ruta

  3. La cadena de consulta

En exacto ese orden.

los llaves debería juego Modelas nombres de propiedades.


Actualizar:
¿Cómo hacer coincidir las teclas con los nombres de propiedades?
La ID de entrada será la clave que obtendrá, cambie las IDS para que coincidan con los nombres de sus propiedades, o incluso mejor, use el Htmltextboxfor Ayudante: ver este artículo:

Otros consejos

Tal vez debería crear ViewModel aplanado y luego usarlo para llenar la vista, y luego sincronizarlo con el modelo real.

¿Puede mostrarnos su modelo y su punto de vista? Si no está utilizando HTMLHELPER, entonces debe comprender muy bien la convención de nomenclatura para que el modelo de vinculación funcione con su modelo. Entonces, lo primero en lo primero es mostrarnos su modelo y vista.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top