具有分数的奇怪模型Binder行为

时间:2011-07-09 14:13:31

标签: asp.net-mvc-3 model-binding

我对奇怪的模型粘合剂行为感到困惑:
  - 当我使用包含小数的参数的RedirectToAction时(因为在俄语中,我们使用“,”而不是“。”,ex 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();
}

的观点: / * index * /

@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和post表单中删除TextBoxFor(x =&gt; x.SecondNumberB)时 - FirstNumberB将导致ModelState错误,当SecondNumberB绑定时应该如此。

UPD2 我想,这是另一个问题,在他的post中描述Phil Haack - asp.mvc首先在查询字符串中查找值并获取它。在我的情况下,在查询字符串中我有?firstNumber = 1.5并且它“按原样”绑定到TextBox,没有文化规则。发布后我们得到FormatException错误。我该如何解决它 - 用正确的文化小数分隔符将十进制值绑定到文本框?我不能使用任何JavaScript。我想在ReturnToRedirect之前使用TempData进行解决,但在这种情况下,用户无法重新加载页面。

1 个答案:

答案 0 :(得分:0)

可能是一种文化问题。确保在web.config <globalization>元素中设置正确的区域性。