2012-02-16 17 views
17

KnockoutJS, KnockoutJS Mapping eklentisi ve jQuery 1.7.1 kullanarak ASP.NET MVC 2'yi kullanarak bir sayfa yapıyorum. KnockoutJS Doğrulama eklentisini de kullanabilmeyi isterdim (here bulundu). Ancak hem sunucu hem de istemci tarafında doğrulamanın olması gerekiyor.KnockoutJS Doğrulaması için eşleme modelleri görüntüleme

Görünüm modellerimin .extend() yöntemini kullanan KnockoutJS Validation plugin eşlemesi olması mümkün mü?

DÜZENLEME: Örnek. Otomatik olarak bu dönüş: Bu içine

[Required] 
public string Firstname { get; set; } 

:

var viewmodel = { 
    firstname: ko.observable().extend({ required: true }); 
} 
+0

C# modellerinde Veri Ek Açıklamaları'nı kullanıyor ve istemcilerin doğrulama kurallarını doldurmak için EditorFor'u kullanıyor musunuz veya ister misiniz?MVC'nin standart MVC stil formları için çok fazla çalışmaz (en azından Internet Uygulama şablonu ile MVC3'te) olarak kullanabileceğiniz yerleşik olarak aynı istemsiz istemciyi kullanabilirsiniz. – kendaleiv

+0

Lütfen orijinal – Ryan

+0

adresindeki düzenlemeler konusuna bakın. Bu çok ilgi çekici bir yaklaşımdır ve ona çok fazla düşünce verdim. C# 'dan Javascript'e davranış kodu oluşturmayı düşünüyorum. Bu, modelini yansıtan ve javascript üreten bir şey oluşturmanız gerektiğini düşünüyorum. Belki sadece doğrulama bölümü ve haritalama eklentisi yaptıklarını yapalım. Eşlemenin ve oluşturulan doğrulama kodunun birleşimi size ihtiyacınız olanı verebilir. Doğrulama kodunu oluşturmanız gerektiğini düşündüğümün nedeni, yalnızca Javascript kullanarak doğrulama kodunu üretmenin zor bir zamanının olacağını düşünüyorum, ancak yanılmış olabilirim. –

cevap

7

Mvc Controls Toolkit içinde knockout.js'de olağan Mvc doğrulamasını (veri ek açıklamaları veya her neyse) etkinleştiren bir motor uygulardım. İstemci tarafı ve sunucu tarafı doğrulaması etkinleştirilebilir. Ayrıca, nakavt Mvc yardımcıları ile kullanılabilir, bazı bağlamalar otomatik olarak çıkarılır, vb.

+0

Eğer MVC Controls Toolkit kullanarak nasıl uyguladığınızda bizi başlatabilirseniz harika olurdu. Çok teşekkürler – Ian

0

doğrulama eklentisi doğrulamak istediğiniz gözlenebilirleri uzatmak şekilde çalışır.

Eşlemelerden oluşturulup oluşturulmadığı önemli değil, yalnızca eşleme tamamlandıktan sonra çalıştırdığınız bir işlevi oluşturun ve istediğiniz tüm doğrulamayı ekleyin.

Veya isterseniz, doğrulama bağlantılarını kullanabilirsiniz. Nakavt doğrulaması için Github'daki Benioku dosyasını okuyun ve nasıl yaptığını görüyorsunuz.

+0

Lütfen orijinal sorudaki düzenlemelerimi inceleyin. – Ryan

1

Ben, bunu çağırmak gerekebilir MVC inşa clientside doğrulama kullanıyor tavsiye bu çalışacaktı:

$.validator.unobtrusive.parse(yourFormElement) 

Kodu dan: MVC2 mütevazi clientside doğrulama olsa varsa https://stackoverflow.com/a/5669575/941536

emin değil MVC3'e yükseltme yapmanız gerekirse sizin için bir seçenek olup olmayacağından emin olun.

+4

KnockoutJs'yi doğrulamak için tercih edilen yöntem bu değil. Form öğelerini doğrulamak istemezsiniz. Görünüm modelini doğrulamak istersiniz. –

+2

DataNote veya FluentValidator .Net kodunu Knockout doğrulama ile yeniden kullanmanın ve Knockout viewmodel'i doğrulamasının kolay bir yolu var mı? İki set doğrulama kuralı oluşturmayı ve korumayı tercih etmekteyim, ancak Knockout viewmodel ve .Net modeli eşleşmezse veya çok farklıysa bu daha da zor olabilir. – kendaleiv

+0

"KnockoutJs'yi doğrulamak için tercih edilen yol bu değil". Niye ya? Doğrulama, kullanıcı girişlerine bağlanır ve girdi öğeleri genellikle model özelliklerine eşlenir. Bir giriş alanına bağlı olmayan, ancak kullanıcı tarafından görülemeyen bazı model özelliklerine bağlı hata mesajlarının gösterilmesi, kullanıcıyı çok karıştırıyor olabilir. –

5

Eğer knockoutjs ve jquery kullanıyorsanız, temel istemci tarafı doğrulaması yapmak için aşağıdaki çok basit bir yöntemle geldim.

<span name="validationError" style="color:Red" 
data-bind="visible: yourValidationFunction(FieldNameToValidate())"> 
* Required. 
</span> 

Açıkçası bunu yapmak istediğini yapmak için "yourValidationFunction" yazmak gerekir:

sayfanızda hata mesajı görüntülemek istediğiniz her yerde

, böyle bir yayılma etiketi bulunur. Sadece doğru ya da yanlış geri dönmesi gerekiyor, gerçek anlamı hatayı gösteriyor.

Herhangi bir doğrulama hatasının görüntülenmesi durumunda kullanıcının ilerlemesini önlemek için jquery'yi kullanabilirsiniz. Bu dışarı diğer birçok doğrulama çözümlerine kıyasla çok daha basit ve daha esnektir

if ($("[name='validationError']:visible").length > 0) { 
     alert('Please correct all errors before continuing.'); 
     return; 
    } 

: Muhtemelen zaten bazı ajax veya olursa ol bir javascript fonksiyonu tetikleyen bir tasarruf düğmesi vardır, bu yüzden sadece bunun üstündeki bu kapsar Orada. Hata mesajınızı istediğiniz yere konumlandırabilirsiniz ve bazı doğrulama kütüphanelerinin nasıl kullanıldığını öğrenmenize gerek yoktur ve bu yöntem sunucu tarafı teknolojisinden bağımsız olarak çalışır.

+0

+1 Çözümünüzün basitliğini beğeniyorum. Şu anda jQuery ile zorunlu olmayan alanlar ve Knockout için mücadele ediyorum ve cevabınız beni yeni bir yöne işaret etti. –