2012-02-09 14 views
5

Tengo el siguiente código:¿@ Html.ValidationSummary funciona para la validación del lado del cliente en MVC3 o MVC4?

@Html.ValidationSummary(false) 
@Html.ValidationSummary(true, "xxx") 

@using (Ajax.BeginForm(
     action, 
     "Menus", 
     null, 
     new AjaxOptions 
     { 
      UpdateTargetId = "update-message", 
      InsertionMode = InsertionMode.Replace, 
      HttpMethod = "POST", 
      OnSuccess = success 
     }, new { @id = "menuForm" })) 
{ 
    <dl> 
    <dt>@Html.LabelFor(model => model.Order)</dt> 
    <dd>@Html.TextBoxFor(model => model.Order)</dd> 
    <dd>@Html.ValidationMessageFor(model => model.Order)</dd> 
    </dl> 

Cuando entro en un valor de pedido de 999 entonces yo inmediatamente consigo validación del lado del cliente que me muestra un mensaje de error justo después del cuadro de texto Orden. Sin embargo, nada aparece en el área Html.ValidationSummary. ¿Es posible usar esto con la validación del lado del cliente?

Aquí es mi modelo:

public class Menu 
{ 
    [Range(0, 99, ErrorMessage = "{0} must be between {1} and {2}")] 
    [DisplayName("Order")] 
    public int Order { get; set; } 

Mi web.config:

<appSettings> 
    <add key="webpages:Enabled" value="false" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 

Respuesta

4

No estoy 100% seguro, pero el resumen de validación que puedo encontrar en la aplicación por defecto MVC 3 está dentro del Formar. Tal vez porque los resúmenes de validación se encuentran fuera del formulario, no se actualizan. ¿Qué sucede cuando mueve el resumen de validación dentro del formulario?

Desde:

@Html.ValidationSummary(false) 
@Html.ValidationSummary(true, "xxx") 

@using (Ajax.BeginForm(
     action, 
     "Menus", 
     null, 
     new AjaxOptions 
     { 
      UpdateTargetId = "update-message", 
      InsertionMode = InsertionMode.Replace, 
      HttpMethod = "POST", 
      OnSuccess = success 
     }, new { @id = "menuForm" })) 
{ 
    <dl> 
    <dt>@Html.LabelFor(model => model.Order)</dt> 
    <dd>@Html.TextBoxFor(model => model.Order)</dd> 
    <dd>@Html.ValidationMessageFor(model => model.Order)</dd> 
    </dl> 

Para:

@using (Ajax.BeginForm(
     action, 
     "Menus", 
     null, 
     new AjaxOptions 
     { 
      UpdateTargetId = "update-message", 
      InsertionMode = InsertionMode.Replace, 
      HttpMethod = "POST", 
      OnSuccess = success 
     }, new { @id = "menuForm" })) 
{ 
    @Html.ValidationSummary(false) 
    @Html.ValidationSummary(true, "xxx") 
    <dl> 
    <dt>@Html.LabelFor(model => model.Order)</dt> 
    <dd>@Html.TextBoxFor(model => model.Order)</dd> 
    <dd>@Html.ValidationMessageFor(model => model.Order)</dd> 
    </dl> 
+1

yo probamos este y es lo mismo. todavía no funciona. Lo que hice fue mover el Html.ValidationMessageFor a la parte superior justo dentro del formulario. Esto funciona, pero realmente no quiero tener muchos Html.ValidationMessageFor uno después del otro en la parte superior de la página. –

+0

Cita: 'Lo que hice fue mover el Html.ValidationMessageFor a la parte superior justo dentro del formulario. Eso es lo que te pedí que pruebes como se ve en el código que sigue al' To: 'en el que los resúmenes de validación están dentro del formar. Así que no sé a qué te refieres con 'Probé esto y es lo mismo. todavía no funciona. – Nope

+1

En cuanto a 'pero realmente no quiero tener muchos Html.ValidationMessageFor uno uno detrás de otro en la parte superior de la página' que es una opción de diseño, al menos ahora ha resuelto el problema de por qué su validación el resumen no apareció. Cómo presentarlos y diseñarlos es otra historia, supongo. – Nope

Cuestiones relacionadas