Html.HiddenFor value property not getting set
我本来可以用
1 | @Html.HiddenFor(x=> ViewData["crn"]) |
但是,我明白了
为了以某种方式规避该问题(
1 2 | @Html.HiddenFor(x => x.CRN, new { @value="1"}) @Html.HiddenFor(x => x.CRN, new { @Value="1"}) |
产生
1 2 | <input id="CRN" name="CRN" type="hidden" value="" /> <input Value="500" id="CRN" name="CRN" type="hidden" value="" /> |
我做错什么了吗?
谢谢
以下将在MVC 4中工作
1 | @Html.HiddenFor(x => x.CRN, new { @Value ="1" }); |
@Value属性区分大小写。您需要在@Value上使用大写字母" V"。
这是我的模特
1 | public int CRN { get; set; } |
这是当您在浏览器中查看时html中输出的内容
1 | <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"/> |
这是我的方法
1 2 3 4 5 | [HttpPost] public ActionResult MyMethod(MyViewModel viewModel) { int crn = viewModel.CRN; } |
您是否尝试过使用视图模型代替ViewData?以
我个人不使用ViewData / ViewBag。我定义视图模型,并让我的控制器操作将这些视图模型传递给我的视图。
例如,在您的情况下,我将定义一个视图模型:
1 2 3 4 5 | public class MyViewModel { [HiddenInput(DisplayValue = false)] public string CRN { get; set; } } |
让我的控制器操作填充此视图模型:
1 2 3 4 5 6 7 8 | public ActionResult Index() { var model = new MyViewModel { CRN ="foo bar" }; return View(model); } |
然后让我的强类型视图仅使用
1 2 | @model MyViewModel @Html.EditorFor(x => x.CRN) |
这会产生我:
1 | <input id="CRN" name="CRN" type="hidden" value="foo bar" /> |
在结果HTML中。
我相信有一个更简单的解决方案。
您必须使用
1 | @Html.Hidden("CRN", ViewData["crn"]); |
这将创建具有
希望能帮助到你!
请记住,@ Html.HiddenFor的第二个参数仅在找不到与该字段匹配的路线或模型数据时才用于设置值。 Darin是正确的,请使用视图模型。
一个简单的答案是使用@ Html.TextboxFor,但将其放置在已隐藏样式的div中。
例:
在视图中:
@Html.TextboxFor(x=>x.CRN)