关于asp.net mvc:Html.HiddenFor value属性未设置

Html.HiddenFor value property not getting set

我本来可以用

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

但是,我明白了

为了以某种方式规避该问题(id=ViewData_crn_ and name=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?以For结尾并采用lambda表达式的强类型辅助函数不能与诸如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);
}

然后让我的强类型视图仅使用EditorFor助手:

1
2
@model MyViewModel
@Html.EditorFor(x => x.CRN)

这会产生我:

1
<input id="CRN" name="CRN" type="hidden" value="foo bar" />

在结果HTML中。


我相信有一个更简单的解决方案。
您必须使用Html.Hidden而不是Html.HiddenFor。看:

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

这将创建具有id="CRN"name="CRN"INPUT标签type="hidden",以及value属性内的正确值。

希望能帮助到你!


请记住,@ Html.HiddenFor的第二个参数仅在找不到与该字段匹配的路线或模型数据时才用于设置值。 Darin是正确的,请使用视图模型。


一个简单的答案是使用@ Html.TextboxFor,但将其放置在已隐藏样式的div中。
例:
在视图中:


@Html.TextboxFor(x=>x.CRN)