2012-05-22 1 views
9

Ich verwende Remote-Validierung, um die Verfügbarkeit von Benutzernamen während der Registrierung für meine asp.net mvc 3 Anwendung (C#) zu überprüfen.Tun Sie etwas auf Erfolg Antwort für die Remote-Validierung in mvc

ich MVC Fern Attribut Validierung bin mit wie:

[Remote("IsUserNameAvailable", "User")] 
public string UserName { get; set; } 

Wenn ich wieder dieses:

return Json(true, JsonRequestBehavior.AllowGet); 

Dann habe ich so etwas wie setzen den verborgenen Feldwert durchführen möchten, die Rückkehr von Aktion oder grünes Symbolbild anzeigen. Und ich möchte auch ID mit wahr zurückgeben.

Wie erreicht man diese Dinge?

Kurz gesagt, ich möchte etwas zum Erfolg machen.

Antwort

19

Ein Weg, das zu erreichen, ist ein benutzerdefinierte HTTP-Response-Header von der Validierung Aktion hinzuzufügen:

public ActionResult IsUserNameAvailable(string username) 
{ 
    if (IsValid(username)) 
    { 
     // add the id that you want to communicate to the client 
     // in case of validation success as a custom HTTP header 
     Response.AddHeader("X-ID", "123"); 
     return Json(true, JsonRequestBehavior.AllowGet); 
    } 

    return Json("The username is invalid", JsonRequestBehavior.AllowGet); 
} 

nun auf dem Client wir natürlich eine Standardform haben und ein Eingabefeld für die Benutzername:

@model MyViewModel 
@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(x => x.UserName) 
    @Html.ValidationMessageFor(x => x.UserName) 
    <button type="submit">OK</button> 
} 

und jetzt das letzte Stück des Puzzles ist ein complete Handler die remote Regel auf dem Feld Benutzername anbringt:

$(function() { 
    $('#UserName').rules().remote.complete = function (xhr) { 
     if (xhr.status == 200 && xhr.responseText === 'true') { 
      // validation succeeded => we fetch the id that 
      // was sent from the server 
      var id = xhr.getResponseHeader('X-ID'); 

      // and of course we do something useful with this id 
      alert(id); 
     } 
    }; 
}); 
+0

wow .... super ....... vielen Dank ...... –