2012-02-09 15 views
5

Ho il codice seguente:@ Html.ValidationSummary funziona per la convalida lato client in 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> 

Quando entro un valore di Ordine di 999 quindi immediatamente ottengo validazione lato client che mi mostra un messaggio di errore subito dopo la casella di testo Ordine. Tuttavia, nulla viene visualizzato nell'area Html.ValidationSummary. È possibile utilizzarlo con la convalida del lato client?

Ecco il mio modello:

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

My Web di configurazione:

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

risposta

4

Io non sono sicuro al 100%, ma la sintesi di convalida che posso trovare nella applicazione predefinita MVC 3 è all'interno del Modulo. Forse perché i tuoi riepiloghi di convalida sono seduti fuori dal modulo che non vengono aggiornati. Cosa succede quando si sposta il riepilogo della convalida all'interno del modulo?

Da:

@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> 

A:

@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

Ho provato questo ed è lo stesso. ancora non funziona Quello che ho fatto è stato spostare l'Html.ValidationMessageFor in cima appena all'interno del modulo. Funziona ma non voglio davvero avere molti Html.ValidationMessageFor tutti uno dopo l'altro nella parte superiore della pagina. –

+0

Citazione: 'Quello che ho fatto è stato spostare il Html.ValidationMessageFor in cima appena all'interno del modulo. Questo è quello che ti ho chiesto di provare come visto nel codice che segue' A: 'in cui i riepiloghi di validazione sono all'interno del modulo. Quindi non so cosa intendi con 'Ho provato questo ed è lo stesso. continua a non funzionare. – Nope

+1

Per quanto riguarda 'ma in realtà non voglio avere molti Html.ValidationMessageFor tutti uno dopo l'altro nella parte superiore della pagina' questa è una scelta di progettazione, almeno ora hai risolto il problema del perché la tua convalida il sommario non si è presentato. Come presentarli e modellarli è un'altra storia che immagino. – Nope

Problemi correlati