Свойство Html.HiddenFor value не устанавливается - PullRequest
27 голосов
/ 27 июля 2011

Я мог бы использовать

@Html.HiddenFor(x=> ViewData["crn"])

, но я получаю

<input id="ViewData_crn_" name="ViewData[crn]" type="hidden" value="500" />

Чтобы как-то обойти эту проблему (id=ViewData_crn_ and name=ViewData[crn]), я попытался сделатьследующее, но атрибут "value" не устанавливается.

@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 ]

53 голосов
/ 28 ноября 2013

Следующее будет работать в 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;
}
38 голосов
/ 28 июля 2011

Вы пытались использовать модель представления вместо 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.

5 голосов
/ 06 февраля 2012

Я считаю, что есть более простое решение.Вы должны использовать Html.Hidden вместо Html.HiddenFor.Посмотрите:

@Html.Hidden("CRN", ViewData["crn"]);

Это создаст тег INPUT type="hidden" с id="CRN" и name="CRN" и правильным значением в атрибуте value.

Надеюсь, это поможет!

3 голосов
/ 28 июля 2011

Помните, что второй параметр @ Html.HiddenFor будет использоваться только для установки значения, когда он не может найти данные маршрута или модели, соответствующие полю.Дарин прав, используйте вид модели.

...