validar solo numeros net mvc formulario for dataannotations custom asp asp.net-mvc asp.net-mvc-5 model-validation

asp.net-mvc - solo - validar formulario asp.net mvc



Validación del modelo ASP.NET MVC 5 para tipos que no admiten nulos(Int32) (1)

La razón por la cual su ModelState es falso es porque la publicación proporciona valores de formulario de cada propiedad en su modelo. Básicamente, el sistema de vinculación del modelo está verificando la validez de los campos data1 y data2, ya que tiene @ Html.EditorFor helpers escritos explícitamente para ambas propiedades en su vista (por lo que no está sucediendo underposting).

Logré replicar con éxito las inquietudes debajo de publicar de los artículos. Simplemente elimine uno de los editores para los ayudantes en su vista, por lo que en realidad está infrautilizando. Con los dos ayudantes presentes, no hay ninguna situación subyacente. Así que la vista se ve así ahora (nota que agregué el helper de validación para ambas propiedades para obtener comentarios en la vista sobre lo que está sucediendo):

Ver:

<div class="form-group"> @Html.LabelFor(model => model.data1) <div> @Html.EditorFor(model => model.data1) @Html.ValidationMessageFor(model => model.data1) @Html.ValidationMessageFor(model => model.data2) </div> </div>

Asegúrese de dejar completamente el @ Html.EditorFor helper para la propiedad data2. Ahora complete cero en el campo de formulario (solo verá un campo de formulario en la vista, por supuesto) y publíquelo en su acción.

ModelState volverá a ser cierto en este escenario, aunque solo se esté publicando un campo de formulario. ¡No es un buen resultado si alguien hace underpost! Así que aquí está la clase de modelo original (ligeramente modificada) donde se producirán problemas subyacentes en el caso de que un campo de formulario quede fuera de su formulario (tenga en cuenta que los atributos requeridos no hacen ninguna diferencia en esta situación ya que ambas propiedades son tipos de valor):

//You could add the Required attribute or not, doesn''t matter at this point. //The concern here is that the Modelstate will still come back as Valid //in the case of a form field being left off of your form (or someone underposts). //So to replicate underposting issues, make sure to comment or delete //at least one Html.EditorFor helper in the view. //[Required] Underposting will occur regardless if this is marked required or not, //so be careful if someone does underpost your form. public Int32 data1 { get; set; } //[Required] public Int32 data2 { get; set; }

Ahora la solución si quieres resolver el problema subyacente: simplemente marca ambas propiedades según sea necesario y haz que se puedan incluir valores nulos como se menciona en los artículos que proporcionaste, así:

[Required] public Int32? data1 { get; set; } [Required] public Int32? data2 { get; set; }

Ahora, cuando la vista se publique con un @ Html.EditorFor helper faltante o un campo de formulario faltante, la validación de ModelState volverá a ser falsa y estará protegido contra problemas subyacentes.

Estoy trabajando en una aplicación ASP.NET MVC 5 y al propietario del proyecto le preocupan los problemas de "publicación insuficiente" causados ​​por la validación de tipos que no admiten nulos (como se menciona en http://bradwilson.typepad.com/blog/2010/ 01 / input-validation-vs-model-validation-in-aspnet-mvc.html y http://www.asp.net/web-api/overview/formats-and-model-binding/model-validation-in- aspnet-web-api ).

Creé un caso de prueba para replicar este problema en ASP.NET MVC 5 pero sin suerte.

Modelo:

public class ContactModel { [Required] public Int32 data1 { get; set; } public Int32 data2 { get; set; } }

Ver:

<div class="form-group"> @Html.LabelFor(model => model.data1) <div> @Html.EditorFor(model => model.data1) </div> </div> <div> @Html.LabelFor(model => model.data2) <div> @Html.EditorFor(model => model.data2) </div> </div>

Controlador:

public ActionResult Index(Models.ContactModel contact) { if (ModelState.IsValid) { Response.Write("modelstate is valid<br>"); return View(); } else { Response.Write("modelstate is invalid<br>"); return View(); } }

Parece que cuando data1 y data2 son nulos en la publicación, sus valores en el modelo ( contact ) serán 0. Sin embargo, ModelState.IsValid también será falso (en lugar de verdadero como se muestra en los dos artículos).

Lo que tengo:

Lo que mostró el segundo artículo:

No pude encontrar ninguna información sobre los cambios en el funcionamiento de la validación de modelos en ASP.NET MVC, así que supongo que hice algo mal con mi caso de prueba. Cualquier pensamiento y sugerencia son apreciados.