Странное поведение модели Binder с дробным числом - PullRequest
0 голосов
/ 09 июля 2011

Меня смущает странное поведение связующей модели:
- когда я использую 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, но в этом случае пользователь не может перезагрузить страницу.

1 Ответ

0 голосов
/ 09 июля 2011

Может быть проблема культуры.Убедитесь, что вы указали правильную культуру в элементе web.config <globalization>.

...