2016-03-22 4 views
1

Um Remote-Validierung stehen ganze Sie die folgenden Ihrer Ansicht nach Modell haben:Ist es möglich, eine allgemeine Remoteüberprüfung in ASP.NET MVC zu verwenden?

public class ViewModelOne { 
    [Required] 
    [Remote("CheckStringIsRed", "RemoteValidationController", ErrorMessage = "It's not red.")] 
    public string BgColour { get; set; } 
} 

und dann irgendwo eine Aktion in einem Controller haben:

public JsonResult CheckStringIsRed(string BgColour) { 
    return Json(BgColour == "Red"); 
} 

aber sagen, dass ich an anderer Stelle die gleiche Validierung durchgeführt werden soll, so :

public class ViewModelOne { 
    [Required] 
    [Remote("CheckStringIsRed", "RemoteValidationController", ErrorMessage = "It's not red.")] 
    public string SomeColour { get; set; } 
} 

Beachten Sie, wie der Name der Eigenschaft die jetzt SomeColour ist, bedeutet, den Anruf zu Das ursprüngliche CheckStringIsRed() wird fehlschlagen. Gibt es eine Möglichkeit, CheckStringIsRed() wiederzuverwenden, wenn man bedenkt, dass die Parameternamen unterschiedlich sind? Ich möchte die Validierung nur einmal schreiben und sie auf may-Eigenschaften verwenden.

+0

Kurze Antwort - Nein, der 'RemoteAttribute' fügt' Daten val' Attribute, die 'jquery.validate.unobtrusive.js' verwendet, um Hinzufügen von Regeln zu 'jquery.validate.js' basierend auf dem Namen der Eigenschaft. Sie müssten Ihren eigenen Ajax-Call implementieren, um Ihre Wünsche zu erreichen. –

+0

@StephenMuecke Bummer .... Wenn du das als Antwort posten willst, werde ich akzeptieren. – TheEdge

+0

Interessant ist, dass Ihre Klassennamen darauf hindeuten, dass Sie die Best Practice befolgen und Ansichtsmodelle verwenden. Warum also nicht einfach einen allgemeinen Eigenschaftennamen verwenden? –

Antwort

1

Nein, das ist nicht möglich. Die RemoteAtribute erzeugt eine ModelClientValidationRule, die von der HtmlHelper verwendet wird, um data-val-* Attribute hinzuzufügen, die wiederum von jquery.validate.unobtrusive.js gelesen werden, um eine Regel zu dem jquery-Validierer basierend auf dem Name der Eigenschaft hinzuzufügen.

Sie Optionen umfassen

  • denselben Eigenschaftsnamen in verschiedenen Ansicht Modelle mit oder
  • das Attribut löschen und Sie besitzen Ajax-Aufruf machen. Zum Beispiel
@Html.TextBoxFor(m => m.somePropertyName, new { @class = "validatecolor" }) 
<span class="field-validation-error" style="display:none">It's not red.</span> 

var url = '@Url.Action("CheckStringIsRed", "yourController")'; 
$.('.validatecolor').blur(function() { 
    $.getJson(url, { color: $(this).val() }, function(result) { 
     if(!result) { 
      $(this).next('span').show(); // choose a better relative selector :) 
     }); 
    }); 
}); 

und den Parameter Controller-Methode zu string color ändern

Verwandte Themen