超文本标记语言未设置hiddenforvalue属性



我可以用

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

最新更新