Меня смущает странное поведение связующей модели:
- когда я использую RedirectToAction с параметрами, которые включают дробное число (потому что в русском языке мы используем "," вместо ".", ex 1,5; 2,5) в View it Связывает с точками, "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
При удалении TextBoxFor (x => x.SecondNumberB) в файле About.cshtml и размещении формы - FirstNumberB вызовет ошибку ModelState, когда SecondNumberB связывается как следует.
UPD2
Я думаю, что здесь есть еще одна проблема, которая описывает Фила Хаака в его post - asp.mvc сначала ищет значения в строке запроса и получает их. И в моем случае в строке запроса у меня есть? FirstNumber = 1.5, и он привязывается к TextBox "как есть", без правил культуры. И после публикации мы получаем сообщение об ошибке FormatException. Как я могу это исправить - привязать десятичные значения к текстовым полям с правильными культуральными десятичными разделителями? Я не могу использовать любой JavaScript. Я думаю об обходном пути с TempData до ReturnToRedirect, но в этом случае пользователь не может перезагрузить страницу.