2012-11-08 15 views
28

Bu alana sahip olduğum için nedense tıklatarak, alana gerek duyduğuna dair bir doğrulama iletisi alır.ASP.NET MVC isteğe bağlı alan gerektiği gibi davranılıyor

[DisplayName("Total Budget:")] 
public double Budget { get; set; } 

@Html.EditorFor(model => model.account.Budget) 
@Html.ValidationMessageFor(model => model.account.Budget) 

public class Account 
{ 
    [DisplayName("Total Budget:")] 
    public double Budget { get; set; } //dropdown 
} 
+0

İşaretleme neye benziyor? –

+0

@AntarrByrd OP – user1662812

+0

güncelleştirildi Hesab neye benziyor? – dove

cevap

64

yerleşik DefaultModelBinder MVC konser verecek denetleyici

BindExclude([Bind(Exclude="Budget")]) için bu özelliği eklemeyi deneyebilirsiniz bir double

double? ila Bütçe değiştirmek int, DateTime, decimal, vb. gibi değer türlerinde gerekli ve veri türü doğrulaması. Bu, 0 gibi bir şekilde somutlaştırma kullanarak açık bir şekilde belirtilmese bile gerçekleşir.. Bu isteğe bağlı hale getirmek için

, Nullable olarak tanımlamak gerekir:

public double? Budget { get; set; } 
+1

Çift kullanıldıysanız genişletmek için? her şey iyi olurdu. Ama çifte bir değer gerektirecek. (Jerad'ın düzenlemesinden önce eklendi). – Maess

+2

Teşekkür ederiz, teşekkürler, teşekkürler – Ashby

+0

Çok teşekkürler, bu günü kurtarın !!! –

1

Muhtemelen Muhtemelen de

5

double bir değer türüdür. Ayarlanmamış olsa bile değer türleri her zaman bir değer içerir. Bu değer, bu tür için varsayılan değerdir (bu durumda 0.0). Tüm değer türleri, çerçeve tarafından gerektiği gibi ele alınır. Bunun tek yolu, özel bir model bağlayıcı oluşturmaktır, ancak bu modelin varsayılan değeri içermesini engellemez (çünkü girilmediğini söylemenin bir yolu yoktur).

Özel bir bağlayıcı oluştursanız bile, modelinizi işlerken, birisi 0 girip girmediğini veya bunun varsayılan değer olup olmadığını anlayamazsınız.

Böylece, tek gerçek çözüm, görünüm modelinizi Nullable<double> (shorthand is double?) gibi bir null türü kullanmaktır.

+2

Belirtilmemişse varsayılan değere sahip olmak istediğiniz bir özellik olduğunda can sıkıcı. Özelliğim boş bırakılırsa, 0 olmamalı, null olmamasını istiyorum, ancak MVC gerekli olduğunu söyleyerek otomatik olarak doğrulama başarısız. – xr280xr

2

Sen Application_Start (Global.asax) aşağıdaki satırı eklemek zorunda

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes = false; 

Kaynak: Unrequired property keeps getting data-val-required attribute

+0

Taşma yığınına hoş geldiniz!Cevabınız alternatif bir çözüm sunar ve tamamen geçerlidir. Bununla birlikte, cevabınız hakkında daha ayrıntılı bilgi vermek genellikle tavsiye edilir. Örneğin, bu yapılandırma satırının uygulamadaki tüm varlıkları etkileyeceğini unutmayın. Daha fazla ayrıntı eklemek için cevabınızı düzeltebilirsiniz. – infiniteRefactor

0

kullanın [NotMapped] açıklama, bu da kullanabilirsiniz akışında gerekli doğrulama kaldırır kendi ekran özellikleri

0

Kullanım Nullable veya ? Özellik adından sonra.

İlgili konular