2010-04-16 21 views
5

önleyin Ben asp.net mvc2 web uygulamasında istemci tarafı doğrulaması kullanmak için xval kullanıyorum. Sayısal bir alana metin girdiğimde verdiği hatalara rağmen, yine de formu veritabanına göndermeye çalışır. Yanlış değerler 0 ile değiştirilir ve veritabanına kaydedilir. Ancak bunun yerine formu denemek ve göndermek bile mümkün olmamalıdır. Bana yardım eden var mı?C# mvc2 xval ile istemci tarafı form doğrulaması,

Ben aşağıdaki gibi özelliklerini belirledik:

[Property] 
[ShowColumnInCrud(true, label = "FromPriceInCents")] 
[Required] 
//[Range(1, Int32.MaxValue)] 
public virtual Int32 FromPriceInCents{ get; set; } 
isteği yakalamak kontrolör olarak aşağıda görünüyor

; Bu kısımda hata yapıyorum.

[AcceptVerbs(HttpVerbs.Post)] 
[Transaction] 
[ValidateInput(false)] 
public override ActionResult Create() 
{ 
    //some foo happens 
} 

Bence aşağıda benziyor:

<div class="label"><label for="Price">FromPrice</label></div> 
<div class="field"> 
<%= Html.TextBox("FromPriceInCents")%> 
<%= Html.ValidationMessage("product.FromPriceInCents")%></div> 

Ve html kodu doğru doğrulama kurallarını oluşturur i aşağıdaki kuralı var görünümünün sonunda

<%= Html.ClientSideValidation<Product>("Product") %> 

umarım Birisi bana bu konuda yardımcı olabilir, şimdiden teşekkürler!

DÜZENLEME: 19 Nisan Bir girdi türü yerine kullanılmakta olan normal bir düğme olduğunu öğrendim = "Düğme" Bu sorun olabilir mi?

<button class="save" type="submit" name="save"><span>Opslaan</span></button> 
+1

Neden ValidationMessage ("product.FromPriceInCents") 'dir ama metin kutusu "FromPriceInCents" kullanıyor? Bu şüpheli görünüyor. Güçlü yazılan yardımcıları kullanmamanın bir sebebi var mı? ValidationMessageFor (x => x.FromPriceInCents) – Jab

+0

Metin kutularını ve doğrulama biçimlerini, güçlü yazılan yardımcılara değiştirdim. Fakat bu değişiklik onaylamayı etkilemiyor, yine de iyi ipucu! – Rob

cevap

0

Neden Range niteliğine sahip çıktınız? Metin kutusuna herhangi bir şey girildiği sürece belirttiğiniz özellikler ile istemci tarafı doğrulamasını geçmelidir.

+0

Aralık özelliği bir testtir. Ama geri koyup ne olduğunu görmeye çalışacağım. – Rob

+0

Tamam, denedim, istemci tarafında doğrulama bu hatayı veriyor; Lütfen 1 ile 2147483647 arasında bir değer girin. Ancak, yangın saldırısında sayfa hala bir geri göndermeye çalışıyor olabilir, ancak aşağıdaki hatayı döndürür; 'Nesne başvurusu bir nesnenin örneğine ayarlanmadı.' – Rob

+0

sizin oluşturma eylemi bu kamu ActionResult oluşturun (NesneTürü NewObject) gibi nesne türünü almak zorunda deneyin – MHinton

2

İlk ve temel kaygım şu şekilde olurdu: neden uygulamanız veritabanındaki değerleri ilk etapta kaydetiyor? XVal, uygulamayı kullanıcı dostu yapmak için iyi bir yol olsa da, sunucu tarafı doğrulaması yapmak için hala VAR. Verilerinizi sunucuda doğrulamazsanız - masif bir güvenlik deliğinize sahip olursunuz! Değerleri kaydetmeden önce kontrol cihazınızda ModelState.IsValid olup olmadığını kontrol etmeyi deneyin. Şimdi

gelen seni

<%= Html.ClientSideValidation<Product>("Product") %> 

buna "Ürün" öneki tüm denetimler için istemci tarafı doğrulama sağlayan bir çalışma şekli kullanılarak xVal doğrulama kayıt ediyoruz gördüklerinizi. Öte yandan Kişisel metin kutusu FromPriceInCents

bir kimliği Yani burada çözüm bunu yapmak olurdu vardır: Ben yayınını güncelledi

<%= Html.TextBox("FromPriceInCents")%> 
<%= Html.ValidationMessage("FromPriceInCents")%> 

<%= Html.ClientSideValidation<Product>() %> 

UPD3 . Önek kullanılmazsa kodu düzeltildi.

Ayrıca, bir çalışma çözümü içeren bir çalışma çözümü derledim. Liste, Düzenle, Sayfa oluştur, dize ve int özellikleri ve xVal doğrulaması.

public class Product 
{ 
    [ScaffoldColumn(false)] 
    public int Id { get; set; } 

    [Required] 
    [Range(1,50)] 
    public int PriceInCents { get; set; } 

    [Required] 
    [StringLength(50)] 
    public string Name { get; set; } 
} 

ve bakış

<%= Html.TextBoxFor(model => model.PriceInCents) %> 
<%= Html.ValidationMessageFor(model => model.PriceInCents) %> 

üzerinde

İşte indirme bağlantısı var ..Belki bu yardımcı olabilir bunu kontrol ve http://www.flexlabs.org/download/xValTest

+0

Teşekkür alıyor kontrolör İyi yanıt için, çözümünüzü deneyeceğim ve size bildireceğim. Sunucu tarafı doğrulaması konusunda haklısınız, aslında bunu düzeltmem gerekiyor. – Rob

+0

Çözümünüzü metin kutusuna önek ekleyerek denedim. Ama sonra doğrulama hiç işe yaramıyor. Bunu böyle kullandığımda; <% = Html.TextBox ("FromPriceInCents")%> <% = Html.ValidationMessage ("product.FromPriceInCents")%> <% = Html.ClientSideValidation ("ürün")%> Doğrulama, sayıları bekleyen bir kutuya metin girdiğimde hatalar gösteriyor. Ancak sayfayı göndermeye çalıştığımda hala bir geri gönderme yapıyor, beklemediğim ve yapmasını istemediğim bir şey. Modeltate.IsValid – Rob

+0

ile şimdi sunucuları çalıştıran bir doğrulama var Evet, Create yöntemi form değerleri değerlerini puck olamaz çünkü .. Ben hızlı yanıt için bir örnek –

İlgili konular