2016-04-13 8 views
0

Ich versuche, die Remote-Funktion zu verwenden, aber es funktioniert nicht.
Eindeutige E-Mail-Modell ASP.NET Code zuerst

Dies ist mein Code:

Modell

[Required(ErrorMessage = "L'email est obligatoire.")] 
[RegularExpression(@"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$", ErrorMessage = "email n'est pas valide.")] 
[DataType(DataType.EmailAddress)] 
[Remote("IsEmailAdminExist", "Admin", ErrorMessage = "Email exist!")] 
public virtual string Email { get; set; } 

-Controller

[HttpGet] 
public JsonResult IsEmailAdminExist(string Email) 
{ 
    return Json(!AdminContext.admins.Any(a => a.Email == Email), JsonRequestBehavior.AllowGet); 

} 

Ich habe nichts zurück.

Das ist meine Form in Ansicht i verwenden, um die Html.BeginForm

@using (Html.BeginForm("Create", "AdminController", FormMethod.Post, new { @id = "form2", @role = "form", @enctype = "multipart/form-data" })) 
         { 
          @Html.AntiForgeryToken() 
          @Html.ValidationSummary(true) 

           <div class="col-md-4"> 

            <div class="form-group @(ViewData.ModelState["Email"] != null && Html.ViewData.ModelState["Email"].Errors.Any() ? "has-error" : "")"> 
             <label class="control-label"> 
              Email <span class="symbol required"></span> 
             </label> 
             @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } }) 
             @Html.ValidationMessageFor(model => model.Email, "", new { @class = "help-block" }) 
            </div> 
           </div> 
           <div class="row"> 
            <div class="col-md-8"> 
             </div> 
            <div class="col-md-4"> 
             <button class="btn btn-yellow btn-block" type="submit" name="Create"> 
             Register <i class="fa fa-arrow-circle-right"></i> 
             </button> 
            </div> 
           </div> 
         } 
+0

Haben Sie UnobtrusiveJavaScript aktiviert und enthalten Sie jquery.validate. *. Js-Dateien? – Win

+0

Ja, ich aktiviere UnobtrusiveJavaScript und ClientValidation –

+0

Zeigen Sie die Skripts an, die Sie in die Ansicht aufgenommen haben. Der Code, den Sie gezeigt haben, funktioniert einwandfrei. –

Antwort

0

Überprüfen Sie Ihre Konfiguration

Ich würde sicherstellen, dass Sie die entsprechenden Konfigurationseinstellungen in Ihrem web.config Datei müssen stellen Sie sicher, dass die ferne/clientseitige Validierung durchgeführt wird:

<appSettings> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
</appSettings> 

Sie sollten auch sicherstellen, dass Sie auch über die richtigen clientseitigen Validierungsbibliotheken verfügen (jquery.{version}.js bzw. jquery.validate.{version}.js).

Überprüfen Sie Ihre Anrufe

Möglicherweise möchten Sie mit den Entwicklertools (F12) in Ihrem Browser betrachten den Netzwerkverkehr zu überwachen und sicherzustellen, dass der Antrag tatsächlich gemacht werden (Sie können dies tun, ein, indem auch in Ihrem IsEmailAddressExists() Anruf Stopp-

Sie sollten eine Anfrage sehen werden, die in etwa wie folgt aussieht:. Wenn thi

~/Admin/IsEmailAdminExist?Email={your-email-value} 

s wird nicht angezeigt. Überprüfen Sie auf der Registerkarte "Konsole", ob Fehler aufgetreten sind. Dies könnte Aufschluss darüber geben, warum die Anforderung nicht erfolgt.

Gehäuse Stellen Sie sicher, kein Problem

Möglicherweise möchten Sie ignorieren Fall zu berücksichtigen, wenn für andere Werte überprüft, wie unterschiedliche Fälle die Any() Methode dazu führen könnten, zum Scheitern verurteilt, da es nicht den richtigen Wert finden würde. Versuchen Sie es mit ToLower() und Trim() zur Vergleichs Groß- und Kleinschreibung machen und alle zusätzlichen Leerraum zu ignorieren:

[HttpGet] 
public JsonResult IsEmailAdminExist(string Email) 
{ 
    // Clean up your e-mail 
    var email = Email.ToLower.Trim(); 
    return Json(!AdminContext.admins.Any(a => a.Email.ToLower() == email), JsonRequestBehavior.AllowGet); 
} 

Überprüfen Sie Ihre E-Mail-Validierungslogik

Wollen Sie mit dieser E, wenn ein Benutzer zurückzukehren - Die Mailadresse existiert bereits?Wenn ja, dann werden Sie tatsächlich true zurück, wenn man nicht vorhanden ist, so dass Sie würde die Negation ! vor Ihrem Anruf nicht brauchen:

// If any exists, this will return true 
Json(AdminContext.admins.Any(a => a.Email.ToLower() == email), JsonRequestBehavior.AllowGet); 

Andernfalls Ihre aktuellen Code korrekt ist (dh es wird false zurückkehren wenn ein Benutzer bereits mit diesem Namen existiert).

+0

habe, behebe ich meinen Code, und nun gibt IsEmailAdminExist den Wert true zurück, aber die E-Mail wurde ohne Überprüfung hinzugefügt –

+0

http: // i .stack.imgur.com/xk3MS.png –

+0

Wenn Sie 'true' von der Funktion ausgeben, wird es die Validierung bestehen und mit Ihrer Funktion fortfahren. Wenn Sie also ein gültiges eingeben, dass * sollte * false zurückgibt, dann sollten Sie vielleicht die '!' Negation verwenden, um das Verhalten zu erhalten, nach dem Sie suchen. –

Verwandte Themen