2011-07-09 61 views
0

奇怪的模型粘合劑行爲:
- 當我使用RedirectToAction與包含分數的參數(因爲在俄羅斯,我們使用「,」而不是「。」,前1 ,5; 2,5)在查看它綁定與點,「4,5 => 4.5」,並且在發佈表單後,我有ModelState錯誤和值等於0.但輸入整數時,所有按預期工作。
我可以修復它嗎?
型號:奇怪的模型綁定器行爲與分數

public class TestA 
{ 
    public double FirstNumberA { get; set; } 
    public double SecondNumberA { get; set; } 
} 

public class TestB 
{ 
    public double FirstNumberB { get; set; } 
    public double SecondNumberB { get; set; } 
} 

控制器:

public ActionResult Index() 
{ 
    return View(); 
} 
[HttpPost] 
public ActionResult Index(TestA model) 
{ 
    return RedirectToAction("About", new { firstNumberB = model.FirstNumberA, secondNumberB = model.SecondNumberA }); 
} 

public ActionResult About(double firstNumberB, double secondNumberB) 
{ 
    return View(new TestB() { FirstNumberB = firstNumberB, SecondNumberB = secondNumberB }); 
} 

[HttpPost] 
public ActionResult About(TestB model) 
{ 
    return View(); 
} 

觀點: /*指數*/

@model TestA 
@using (Html.BeginForm()) 
{ 
    @Html.TextBoxFor(x => x.FirstNumberA) 
    @Html.TextBoxFor(x => x.SecondNumberA) 
    <input type="submit" name="submit" value="submit" />            
} 

/*約*/

@model TestB 
@using (Html.BeginForm()) 
{ 
    @Html.TextBoxFor(x => x.FirstNumberB) 
    @Html.TextBoxFor(x => x.SecondNumberB) 
    <input type="submit" name="submit" value="submit" /> 
} 

Upd 當在About.cshtml和後表單中刪除TextBoxFor(x => x.SecondNumberB)時 - 當SecondNumberB綁定時,FirstNumberB將導致ModelState錯誤。

UPD2 我認爲,這裏是另一個問題,那說明菲爾哈克在他post - asp.mvc首先查找值的查詢字符串,並得到它。在我的情況下,在查詢字符串中,我有?firstNumber = 1.5,它與TextBox「原樣」綁定,沒有文化規則。發佈後,我們得到FormatException錯誤。我該如何解決它 - 將十進制值與正確的文化十進制分隔符綁定到文本框?我無法使用任何JavaScript。我想在ReturnToRedirect之前使用TempData解決方法,但在這種情況下,用戶無法重新加載頁面。

+1

http://stackoverflow.com/questions/6613621/mvc-3-decimal-server-side-validation-problem/ – Eranga

回答

0

可能是一個文化問題。確保你的web.config文件中設置了正確的文化<globalization>元素。

+0

可能的副本,但網站需要正確支持俄語和英語 – Boo

+0

@Boo,然後設置文化到'auto'這將使用當前的瀏覽器文化。並設置文化和UICulture。 –

+0

哦,我忘記了,在工作項目中,文化是正確的:在恩文化中沒關係,但是用俄語 - 沒有 – Boo