Свойство Html.HiddenFor значение не установлено
Я мог бы использовать
@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="" />
Я что-то делаю неправильно? благодаря
Ответы
Ответ 1
Вы пытались использовать модель представления вместо 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.
Ответ 2
В 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;
}
Ответ 3
Я считаю, что есть более простое решение. Вы должны использовать Html.Hidden
вместо Html.HiddenFor
. Посмотрите:
@Html.Hidden("CRN", ViewData["crn"]);
Это создаст тег INPUT
type="hidden"
, с id="CRN"
и name="CRN"
и правильное значение внутри атрибута value
.
Надеюсь, поможет!
Ответ 4
Имейте в виду, что второй параметр для @Html.HiddenFor будет использоваться только для установки значения, если он не может найти маршрут или данные модели, соответствующие полю. Дарин правильно, используйте модель взгляда.