我对奇怪的模型粘合剂行为感到困惑:
- 当我使用包含小数的参数的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进行解决,但在这种情况下,用户无法重新加载页面。
答案 0 :(得分:0)
可能是一种文化问题。确保在web.config <globalization>
元素中设置正确的区域性。