我可以用
@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="" />
我做错了什么吗?由于 下面将在MVC 4中工作
@Html.HiddenFor(x => x.CRN, new { @Value = "1" });
@Value属性区分大小写。 @Value需要大写的"V"。
这是我的模型
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;
}
您是否尝试过使用视图模型而不是ViewData?以For
结尾并接受lambda表达式的强类型帮助程序不能处理弱类型结构(如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.Hidden
而不是Html.HiddenFor
。看:
@Html.Hidden("CRN", ViewData["crn"]);
这将创建type="hidden"
的INPUT
标签,id="CRN"
和name="CRN"
,以及value
属性中的正确值。
希望有帮助!
请记住@Html的第二个参数。HiddenFor只在找不到与该字段匹配的路由或模型数据时才用于设置该值。
一个简单的答案是使用@Html。TextboxFor,但将其放置在一个div中,该div使用样式隐藏。例子:在视图:
<div style="display:none">
@Html.TextboxFor(x=>x.CRN)
</div>
简单方法
@{
Model.CRN = ViewBag.CRN;
}
@Html.HiddenFor(x => x.CRN)