2011-03-04 21 views
21

mi dispiace se questo è stato chiesto già, ma io sono alla ricerca di qualche tempo, ma tutto quello che ho trovato sono piuttosto vecchi post (mvc1, MVC2). Ho un modulo che vorrei inviare tramite Ajax.asp.net MVC 3 - modulo ajax presentare e validazione

This sembra che avrebbe funzionato, ma non coprire la validazione lato server.

1) Non sono sicuro di dover utilizzare AjaxHelper.BeginForm o utilizzare chiamate jQuery originali ($.ajax)? Qual è l'approccio consigliato qui?

2) Come posso gestire client e server di validazione lato? Spero che il framework mvc fornisca un meccanismo integrato per gestire questo problema? Ci sono alcune convalide che sto facendo solo lato server. Utilizzerebbe un ValidationSummary ancora lavorare qui?

Sto usando asp.net MVC3/rasoio con la convalida javascript unobtrussive.

Grazie!

Edit: (come richiesto da Bobby B di seguito). Questo è stato aggiunto mesi dopo aver chiesto la questione come un utente voleva sapere come utilizzare AjaxHelper

Questo è il codice javascript che ho usato:

<script type="text/javascript"> 

function ajaxValidate() { 
    return $('form').validate().form(); 
} 

function getGbPostSuccess(ajaxContext){ 
    // .... it is not necessary to do anything here. 
} 
function showFaliure(ajaxContext){ 
    // handle failure 
} 

snippet HTML:

@using (Ajax.BeginForm("Index", "Home", new AjaxOptions 
         { 
          UpdateTargetId = "form1", 
          InsertionMode = InsertionMode.Replace, 
          OnBegin = "ajaxValidate", 
          OnSuccess = "getGbPostSuccess", 
          OnFailure = "showFaliure" 
         })) 
{ 

risposta

8

Sto usando malsup's jQuery form plugin per un po 'per questo scopo. Sinceramente non ho familiarità con AjaxHelper, ma sembra che farà ciò che stai cercando. Per quanto riguarda la convalida sia lato client che lato server, ciò dovrebbe accadere per lo più automaticamente a condizione che si utilizzi l'associazione modello e gli attributi dallo spazio dei nomi System.DataAnnotations.

public class MyModel 
{ 
    [Required(ErrorMessage = "Please enter your name")] 
    public String Name { get; set; } 

    [Required(ErrorMessage = "Please enter your email")] 
    public String Email { get; set; } 

    [Required(ErrorMessage = "Please enter a rating")] 
    [Range(1, 5, ErrorMessage = "The rating must be between 1 and 5")] 
    public Int32 Rating { get; set; } 
} 

[HttpPost] 
public ActionResult Index(MyModel myModel) 
{ 
    if(ModelState.IsValid) 
    { 
     // good to go, put it in the DB or whatever you need to do 
    } 
    else 
    { 
     return View(model); // return the user back to the page, ModelState errors can be viewed using Html.ValidationSummary() or individual Html.ValidationMessageFor() calls 
    } 
} 

Se stai facendo il proprio validazione lato server personalizzati, è possibile creare il proprio attributo di convalida personalizzato con la creazione di un attributo che implementa ValidationAttribute, o semplicemente aggiungere errori di convalida chiamando ModelState.Errors.Add () (o qualcosa del genere, non ho un riferimento a portata di mano)

Per il lato client, MVC genererà la convalida del client in base agli attributi DataAnnotations sul modello.

+0

Grazie! Ce l'ho ora. Ho finito per usare AjaxHelper. – santiagoIT

+0

Qualche possibilità di approfondire come hai usato AjaxHelper? Sto affrontando lo stesso problema io stesso e sto cercando di decidere quale sia l'approccio migliore da adottare. Grazie! –

+0

Aggiungerò il codice di esempio come modifica alla domanda. In questo modo posso formattarlo meglio ;-) – santiagoIT

1

MVC.NET 3 ha già questo fuori dalla scatola. Assicurati di aver abilitato ClientValidationEnabled nel web.config. Controllare this

+0

ho verificato il link, ma spiega come abilitare la convalida lato client. Ho abilitato la validazione lato client, che purtroppo non è la mia domanda. – santiagoIT

Problemi correlati