Свойство Html.HiddenFor value не устанавливается
Я мог бы использовать
@Html.HiddenFor(x=> ViewData["crn"])
но я понимаю,
<input id="ViewData_crn_" name="ViewData[crn]" type="hidden" value="500" />
Чтобы как-то обойти эту проблему (id=ViewData_crn_ and name=ViewData[crn]
), Я попытался сделать следующее, но атрибут "значение" не устанавливается.
@Html.HiddenFor(x => x.CRN, new { @value="1"})
@Html.HiddenFor(x => x.CRN, new { @Value="1"})
генерирует
<input id="CRN" name="CRN" type="hidden" value="" />
<input Value="500" id="CRN" name="CRN" type="hidden" value="" />
Я делаю что-то не так? Спасибо
4 ответа
Вы пытались использовать модель представления вместо ViewData? Сильно типизированные помощники, которые заканчиваются For
и взять лямбда-выражение не может работать со слабо типизированными структурами, такими как ViewData
,
Лично я не использую ViewData/ViewBag. Я определяю модели представлений, и мои действия контроллера передают эти модели представлений моим представлениям.
Например, в вашем случае я бы определил модель представления:
public class MyViewModel
{
[HiddenInput(DisplayValue = false)]
public string CRN { get; set; }
}
чтобы действие моего контроллера заполнило эту модель представления:
public ActionResult Index()
{
var model = new MyViewModel
{
CRN = "foo bar"
};
return View(model);
}
и тогда мой строго типизированный вид просто использует EditorFor
помощник:
@model MyViewModel
@Html.EditorFor(x => x.CRN)
который бы сгенерировал меня:
<input id="CRN" name="CRN" type="hidden" value="foo bar" />
в результирующем HTML.
Следующее будет работать в MVC 4
@Html.HiddenFor(x => x.CRN, new { @Value = "1" });
Свойство @Value чувствительно к регистру. Вам нужна заглавная буква "V" на @Value.
Вот моя модель
public int CRN { get; set; }
Вот что выводится в html при просмотре в браузере
<input value="1" data-val="true" data-val-number="The field CRN must be a number." data-val-required="The CRN field is required." id="CRN" name="CRN" type="hidden" value="1"/>
Вот мой метод
[HttpPost]
public ActionResult MyMethod(MyViewModel viewModel)
{
int crn = viewModel.CRN;
}
Я считаю, что есть более простое решение. Вы должны использовать Html.Hidden
вместо Html.HiddenFor
, Посмотрите:
@Html.Hidden("CRN", ViewData["crn"]);
Это создаст INPUT
тег type="hidden"
, с id="CRN"
а также name="CRN"
и правильное значение внутри value
приписывать.
Надеюсь, поможет!
Помните, что второй параметр @Html.HiddenFor будет использоваться только для установки значения, когда он не может найти данные маршрута или модели, соответствующие полю. Дарин прав, используйте вид модели.
Простой способ
@{
Model.CRN = ViewBag.CRN;
}
@Html.HiddenFor(x => x.CRN)
Простой ответ - использовать @Html.TextboxFor, но поместить его в div, скрытый со стилем. Пример: в представлении:
<div style="display:none">
@Html.TextboxFor(x=>x.CRN)
</div>