Проверка MVC 3 htmlAttributes на скрытый ввод - PullRequest
2 голосов
/ 05 апреля 2011

У меня есть какая-то проверка на стороне клиента mvc3, которая ведет себя странно.

В моем контроллере у меня есть

ViewBag.Id = item.Id;
ViewBag.reqAction = item.RequestedAction;
return View("Decline");

На мой взгляд, у меня есть

@Html.HiddenFor(model => model.Id, new { value = ViewBag.Id })
@Html.HiddenFor(model => model.RequestedAction, new { value = ViewBag.reqAction })

Независимо от того, что я делаю, значение для RequestedAction будет пустым,Я даже пытался ...

@Html.HiddenFor(model => model.RequestedAction, new { value = "test" })

Значение Id работает отлично, и проверка работает на других полях (я опущен).Я проследил код, и ViewBag.reqAction имеет точное значение, которое, я думаю, должно иметь.Моя ViewModel выглядит следующим образом ...

    [Required]
    public int Id { get; set; }

    [Required]
    public string RequestedAction { get; set; }

    [Required]
    [DataType(DataType.MultilineText)]
    public string Explanation { get; set; }

Почему я не могу получить какие-либо данные в атрибут значения для скрытого ввода RequestedAction?

Ответы [ 2 ]

4 голосов
/ 05 апреля 2011

Я полагаю, что MVC пытается получить значение от самой модели.Когда он объединяет атрибуты htmlAttributes, он перезаписывает указанное вами значение.Причина, по которой работает Id, заключается в том, что MVC, вероятно, получает значение из какого-то другого места (возможно, ViewBag).Попробуйте установить значение для модели напрямую (или поместите его в состояние модели)

1 голос
/ 16 июня 2011

Насколько я понимаю, проверка на стороне клиента не будет проверять значения скрытых полей (у меня была такая же проблема).

Мой обходной путь состоял в том, чтобы просто использовать поля ввода (используя HTML.EditorFor), так как я знал, что это прекрасно работает как на стороне клиент / сервер.Затем я обернул все EditorFor, которые должны быть скрыты внутри div, с классом "HiddenValidator" и использую jQuery, чтобы скрыть этот класс в document.ready.

Возможно, это не самое красивое решение, но оно получает работусделано.

...