2011-03-17 18 views
27

tengo 2 formularios de una página de la siguiente manera:Especificar Resumen de validación en múltiples formas

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("code", "Confirmation Code") 
    @Html.TextBox("code") 
    <input type="submit" value="Go" /> 
} 
@using (Html.BeginForm("SendConfirmation", "Auth")) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("email", "Email") 
    @Html.TextBox("email") 
    <input type="submit" value="Resend" /> 
} 

Si SendConfirmation genera un error, se muestra 2 Resumen de validación existen. ¿Cómo puedo obtener el resumen de validación para orientar el suyo?

Respuesta

5

la solución es llamar el resumen de validación sólo cuando se valide su forma

para más detalles y comprueba this blog post

+1

Esta es la respuesta al problema de dos resúmenes de validación. Solo dibuje el resumen de validación que desea mostrar. Por ejemplo, el usuario hace clic en iniciar sesión. En el controlador, establezca una propiedad del modelo que como "CurrentAction" para "iniciar sesión". Luego use esa propiedad en la vista para NO dibujar el resumen de validación para la parte de registro del formulario. –

0

Para lograr esto es necesario separar las dos formas, poner a cada uno en un parcial ver, y devolver la vista parcial en enviar si la validación falla. Cambie el resultado de su acción para devolver un resultado parcial.

las vistas parciales se pueden representar en la página utilizando el siguiente:

@Html.partial("_PartialView") 

o de esta manera si usted necesita para pasar de un modelo

@Html.partial("_Partial", Model) 

No se puede tener dos resúmenes de validación de la misma página de otra manera.

-1

definir explícitamente la acción y el controlador en forma si tiene varias formas en 1 la vista, al igual que

@using (Html.BeginForm("SendCode", "Auth")) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("code", "Confirmation Code") 
    @Html.TextBox("code") 
    <input type="submit" value="Go" /> 
} 
@using (Html.BeginForm("SendConfirmation", "Auth")) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("email", "Email") 
    @Html.TextBox("email") 
    <input type="submit" value="Resend" /> 
} 

la creencia de que para ambas formas que tienen diferentes acciones.

+0

Esto no resuelve el problema, el método HtmlHelper.ValidationSummary simplemente lee los errores en el diccionario ModelState y los muestra, independientemente de la forma en que se originaron – Nick

2

Html.ValidationSummary() no necesita estar dentro de su elemento form y solo lo necesita la mayoría de las veces. Lo movería fuera de tus dos formas, algo así como justo por encima del contenido de tu cuerpo principal y eso debería darte el efecto deseado. Creo que en mi última aplicación la coloqué en el archivo de diseño.

14

Dar al botón de enviar un nombre único en ambos sus formas, así:

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("code", "Confirmation Code") 
    @Html.TextBox("code") 
    <input type="submit" name="login-top" value="Go" /> 
} 
@using (Html.BeginForm("SendConfirmation", "Auth")) 
{ 
    @Html.ValidationSummary() 
    @Html.Label("email", "Email") 
    @Html.TextBox("email") 
    <input type="submit" name="login-main" value="Resend" /> 
} 

A continuación, se puede comprobar si una forma particular, ha sido presentado por la comprobación del valor de la solicitud de la clave que corresponde al botón de enviar y luego mostrar condicionalmente el resumen de validación, es decir. en la parte superior, debe agregar:

if (Request.Form.AllKeys.Contains("login-top")) 
{ 
    @Html.ValidationSummary() 
} 
Cuestiones relacionadas