2011-01-13 163 views
8

我有一個視圖,我讓輸入字段在我的SQL Server 2008 R2數據庫設置爲浮動,我使用實體Framwork 4.爲什麼ASP.NET MVC 3不能正確驗證我的浮動?

在實體框架模型中場看起來像這樣private Nullable<global::System.Double> _TestNumber;

和視圖使用一個EditorField允許這樣的輸入:

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

不過,我在確認消息中收到此錯誤:The value '13.51' is not valid for TestNumber.我試過用逗號,而不是時期,同樣的事情。

對此提出建議?

回答

2

這應該工作:

視圖模型:

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

控制器:

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

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

查看:

,你可以檢出和這可以解釋
@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" /> 
} 

一件事beh你觀察的行爲是客戶端文化和服務器端文化之間的不一致。因此,例如,如果已經啓用了客戶端驗證,但客戶端用文化作爲,小數點分隔然後13.51將失敗客戶端驗證,如果服務器使用文化作爲.小數點分隔然後13,51會失敗服務器端驗證。因此,無論13.5113,51都無法驗證,但在不同的層。爲了使服務器使用相同的文化作爲客戶端,你可以設置你的web.config中的文化auto如下:

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

我添加了全球化``但只要我提交它表示「數值'10.50'對於`無效'。我如何確保它現在真的是同一種文化? – 2011-01-13 15:15:29