2011-01-13 28 views
8

Ben girdi, alanlar benim SQL Server 2008 R2 veritabanı içinde şamandıra olarak ayarlanır izin Görünüm var ve saha bu private Nullable<global::System.Double> _TestNumber;ASP.NET MVC 3 neden floatlarımı doğrulamıyor?

benziyor varlık Framework Modeli Varlık framwork 4.

kullanıyorum

Ve Görünüm böyle girdi sağlamak için bir EditorField kullanır:

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

Ben ancak doğrulama iletisi bu hatayı alıyorum: The value '13.51' is not valid for TestNumber. yerine dönemin virgül, aynı şey ile denedim.

Öneriler?

cevap

2

That çalışması gerekir:

Görünüm Modeli:

public class MyViewModel 
{ 
    public double? TestNumber { get; set; } 
} 

Denetleyici:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(new MyViewModel { TestNumber = 13.51 }); 
    } 

    [HttpPost] 
    public ActionResult Index(MyViewModel model) 
    { 
     return View(model); 
    } 
} 

Görünüm: Eğer ödeme olabilir ve hangi açıklayabilir

@model AppName.Models.MyViewModel 
@{ 
    ViewBag.Title = "Home Page"; 
} 
@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(x => x.TestNumber) 
    @Html.ValidationMessageFor(x => x.TestNumber) 
    <input type="submit" value="OK" /> 
} 

Bir şey beh gözlemlediğiniz avior, istemci tarafı kültürü ve sunucu tarafı kültürü arasındaki tutarsızlıktır. istemci tarafı doğrulama ancak müşteri kültür ondalık ayırıcı olarak , kullanır etkinleştirdiyseniz örneğin Öyleyse 13.51 istemci tarafında doğrulama başarısız olur ve sunucu kültür ondalık ayırıcı olarak . kullanıyorsa o zaman 13,51 sunucu tarafı doğrulama başarısız olur. Bu nedenle, 13.51 ve 13,51 öğelerinin her ikisi de geçerli katmanlar için geçerli değil. Eğer web.config auto kültür aşağıdaki ayarlayabilirsiniz istemcisi olarak aynı kültürü kullanmak sunucu için için:

<globalization 
    requestEncoding="utf-8" 
    responseEncoding="utf-8" 
    culture="auto" 
    uiCulture="auto" 
/> 
+1

ben ekledim o küreselleşme ' yılında' ama en kısa sürede teslim olarak "Evet, 10, 50" değeri "için geçerli değil" şeklindedir. Şimdi aynı kültürün gerçekten olmasını nasıl sağlayabilirim? –

+0

@Filip Ekberg, ya '10,50'? Ben false ClientValidationEnabled ayarladığınızda çalışır –

+0

'' ama doğru olarak ayarlandığında zaman değil. –