【发布时间】:2017-01-27 00:02:40
【问题描述】:
我试图从我的控制器获取一个整数值到我的视图中,然后将该值添加为隐藏字段,以便稍后在我的 JavaScript 客户端代码中使用。
我在尝试添加隐藏字段时遇到异常。
重现步骤如下:
我的 cshtml 页面:
@model Int32
@{
ViewBag.Title = "GetGeneric";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@section DetailJavascript
{
@Scripts.Render("~/Scripts/Generic.js")
}
@Html.HiddenFor(model => model, new { id = "GenericID" });
<h2>GetGeneric</h2>
这是我的控制器代码:
public ActionResult GetCategoryDetail(int id)
{
Object p = id;
return View(p); //I added a breakpoint here and the value of variable 'p' is not null !!
}
编辑: 异常详情
谢谢!
【问题讨论】:
-
什么异常?还有你为什么要通过
object而不是int(应该只是return View(id); -
你为什么要升级
id? -
当您使用
HiddenFor时,我很确定(未检查,如果我错了请纠正我)它从model => model.property获取属性名称。由于您没有指定属性,因此属性名称为 null,为您提供“值不能为 null 或为空” -
问题是你的模型是一个值类型,你不能使用值类型作为
public static MvcHtmlString HiddenFor<TModel, TProperty>(...中的TModel你需要将属性包装在模型中,或者手动生成html -
仅供参考,错误出现在
private static MvcHtmlString InputHelper(...方法的第一行 - 请参阅source code(在页面底部)。您可以编写您赢得的扩展方法来解决它
标签: c# asp.net-mvc null