28

我本来可以用

@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="" />

我做错什么了吗??谢谢

4

6 回答 6

54

以下将在 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;
}
于 2013-11-27T21:10:38.667 回答
39

您是否尝试过使用视图模型而不是 ViewData?以 lambda 表达式结尾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 中。

于 2011-07-27T20:11:06.277 回答
5

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

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

这将在属性内创建一个、 和 的INPUT标记type="hidden"id="CRN"以及name="CRN"正确的值value

希望能帮助到你!

于 2012-02-06T00:15:39.580 回答
3

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

于 2011-07-28T19:17:56.793 回答
0

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

<div style="display:none"> @Html.TextboxFor(x=>x.CRN) </div>

于 2019-12-25T21:19:45.340 回答
0

简单的方法

@{
   Model.CRN = ViewBag.CRN;
}

@Html.HiddenFor(x => x.CRN)
于 2020-07-13T05:36:24.977 回答