10

Visual Studio 2012 kullanıyorum ve çalışmak için bir özel özellik istemcisi yan mantığı alamıyorum, daha küçük bir ölçekte yeniden oluşturmak için yeni bir MVC 4 projesi oluşturdum.ASP.NET MVC 4 - İstemciler Tarafından Doğrulama Çalışmıyor

public class MyModel 
{ 
    public int Id { get; set; } 
    [Required] 
    public string LastName { get; set; } 
    [NeverValid(ErrorMessage="Serverside Will Never Validate")] 
    public string FirstName { get; set; } 
} 

public class NeverValidAttribute : ValidationAttribute, IClientValidatable 
{ 
    public override bool IsValid(object value) 
    { 
     return false; 
    } 

    protected override ValidationResult IsValid(object value, ValidationContext validationContext) 
    { 
     return new ValidationResult(this.ErrorMessage, new[] { validationContext.MemberName }); 
    } 

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context) 
    { 
     yield return new ModelClientValidationRule 
     { 
      ErrorMessage = this.ErrorMessage, 
      ValidationType = "nevervalid" 
     }; 
    } 
} 

doğrulamak asla modeli ve Özellik sonra nevervalid.js

denilen bir javascript dosyası da bulunmaktadır HomeController

public ActionResult Index() 
{ 
    return View(new MyModel()); 
} 

[HttpPost] 
public ActionResult Index(MyModel model) 
{ 
    if (!ModelState.IsValid) 
    { 
     // Will Always Be Invalid 
    } 

    return View(model); 
} 

eklenen aşağıdaki eylemleri var

$(function() { 
    $.validator.addMethod("nevervalid", function() { 
     return false; 
    }, "Clientside Should Not Postback"); 

    $.validator.unobtrusive.adapters.addBool("nevervalid"); 
}); 

ve Dizin Görünümü

@model CustomAttribute.Models.MyModel 

@{ 
    ViewBag.Title = "Home Page"; 
} 

@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 

    <fieldset> 
     <legend>MyModel</legend> 

     @Html.HiddenFor(model => model.Id) 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.LastName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.LastName) 
      @Html.ValidationMessageFor(model => model.LastName) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.FirstName) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.FirstName) 
      @Html.ValidationMessageFor(model => model.FirstName) 
     </div> 

     <p> 
      <input type="submit" value="Save" /> 
     </p> 
    </fieldset> 
} 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
    @Scripts.Render("~/Scripts/nevervalid.js") 
} 

sayfa yüklendiğinde, aşağıdaki dosyalar (yüklenen ağ sekmesinden bu var zaman benim web.config'de ilgili alanlar bu

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

benziyor kromun F12)

http://localhost:7440/ 
http://localhost:7440/Content/site.css 
http://localhost:7440/Scripts/modernizr-2.5.3.js 
http://localhost:7440/Scripts/jquery-1.7.1.js 
http://localhost:7440/Scripts/jquery.unobtrusive-ajax.js 
http://localhost:7440/Scripts/jquery.validate.js 
http://localhost:7440/Scripts/jquery.validate.unobtrusive.js 
http://localhost:7440/Scripts/nevervalid.js 

ve benim özel özniteliğim ilgili ekler. çok ... çok gibi ilk isim girişine

<input class="text-box single-line valid" data-val="true" data-val-nevervalid="Serverside Will Never Validate" id="FirstName" name="FirstName" type="text" value=""> 

veriye şeyler arayan, ben neden Ah neden bu şey bazı mükemmel burada javascript kodu seyir varken serverside doğrulama yapmak için geri gönderebileceksiniz ilgisi var, size sormak? Bir yerdeki tepenin üstünde aysız bir gecede bir hayvanı feda etmek zorunda mıyım?

+0

bu yardımı mu, doğrulama özelliğinde gerekli tüm işlevleri geçersiz kılma değiliz görünüyor. http://stackoverflow.com/questions/8284207/asp-net-mvc-implement-custom-validator-use-iclientvalidatable –

+0

Merhaba, Patrick, sorunlara bakmak için zaman ayırdığınız için teşekkürler. En küçük tekrarlanabilir kod, ikinci IsValid geçersiz kıldım ... hala işe yaramıyor ... Sanırım ilgili tüm SO soruları geçmiş olmalıyım. ama hiçbir şey ... Birinin kendi dünyaları üzerinde yeniden üretebileceğini umuyorum, deli olduğumu doğrulayın ... – G2Mula

cevap

18

Nevervalid.js'yi değiştirdiyseniz, kodun belgenin hazır olmadan yürütülmesi için ne olacağını merak ediyorum.

Temel düşüncem, körü hazır olduğunda belgeyi ayrıştırarak göze batmayan doğrulamanın işe yaramasıdır ... ancak özel doğrulama öğelerinizi aynı anda/daha sonra yüklüyorsanız, ne yapacağını bilmez karşınıza geldiğinde size özel geçerlilik veri özelliği.

Neyse, nevervalid.js basitçe olmaya değiştirmeyi deneyin:

(function($) { 
    $.validator.addMethod("nevervalid", function() { 
     return false; 
    }, "Clientside Should Not Postback"); 

    $.validator.unobtrusive.adapters.addBool("nevervalid"); 
})(jQuery); 
+1

Ana() est! – G2Mula

+0

Evet, hala çalışır ve düzenleme çok daha az "çıplak" gibi görünüyor, çok uzun süre jQuery kullanıyordum ve içinde bazı şeyler var aslında ne demek istediklerini sormayı unuttum ... – G2Mula

+2

Tüm iyi, bu sorunu çözmek sevindim . Düzenleme sadece en iyi uygulama olayıydı :-) – Charlino

İlgili konular