Creé una vista parcial en una aplicación MVC 3. Este punto de vista tiene un modelo fuertemente tipado como esto:ASP.NET MVC PartialView no emite el marcado de validación
public class ProductViewModel
{
[Required, Display(Name = "Product price")]
public decimal? ProductPrice
{
get;
set;
} ...
}
En mi método de acción invoco el método PartialView como esto
PartialView("ProductViewModel", products[0]);
Pero en la página no puedo ver ningún marcado por la lógica de validación y sin embargo no pasa nada si hay errores en la página. Si utilizo esta vista parcial como una plantilla de editor, funciona. Se agradece cualquier ayuda.
Editar: Para ser más específico, tengo un formulario HTML y quiero agregarle marcas a través de la actualización ajax (si el usuario hace clic en un botón, quiero agregar un nuevo marcado a ese formulario). Si incluyo esos controles estáticamente, quiero decir que si los renderizo cuando la página se carga, la validación funciona, pero si agrego controles a esa forma mediante una llamada ajax, no se inserta ninguna marca de validación para esos controles. Mi vista parcial se ve así:
@Html.LabelFor(x => x.ProductPrice)
@Html.TextBoxFor(x => x.ProductPrice)
@Html.ValidationMessageFor(x => x.ProductPrice)
Mi forma se parece a esto:
@using (Html.BeginForm())
{
<div id="div_Products">
@Html.EditorFor(x => x)
</div>
<input type="submit" value="Compare" />
}
El código anterior funciona bien, validación funciona. En el lado del servidor invoco un método de acción que se parece a:
[HttpPost]
public ActionResult InsertProduct()
{
var newProductVM = new ProductViewModel{ ProductPrice = 789 };
return PartialView("~/Views/Nutrition/EditorTemplates/ProductViewModel.cshtml", newProductVM);
}
me di cuenta de que el motor MVC inserta los validación de marcado sólo si se considera que los controles están dentro de un control de formulario. Cuando trato de actualizar mi control de formulario a través de una llamada ajax, MVC no tiene manera de saber que se colocarán dentro de un elemento de formulario y es por eso que no emite ninguna lógica de validación para ellos, supongo.
Tiene sentido que un editor "emita" errores de validación y demás, y que una vista no lo haga. ¿Podemos ver el código para su vista? – rfmodulator
El problema es que MVC inserta el marcado de validación solo si encuentra que los controles están dentro de un formulario. El problema es que quiero agregar un marcado a un control de formulario mediante la actualización ajax, pero de esta forma el motor MVC no sabe que este marcado se insertará en un elemento de formulario y, por lo tanto, no emite ningún marcado de validación. – Zoliqa
Puede forzarlo con algún código Html.ValidationMessageFor(). Como dije, muéstranos tu opinión, por favor. – rfmodulator