验证无法使用@ Html.HiddenFor

时间:2012-01-04 19:07:28

标签: c# asp.net asp.net-mvc-3 razor

我有以下代码:

@Html.HiddenFor(model => model.Posted, Model.Posted = DateTime.Now)

但验证不起作用当我运行我的应用程序并尝试编辑或创建项目时,它会崩溃。

public ActionResult Create()
{
    return View(new NewsItem());
}

我的控制器上面还有以下代码,应用程序全部符合我的要求,例如输入当前日期并保存,但是如果我将一个编辑框留空或者所有编辑框的空白应用程序崩溃并给出以下错误:

  

对象引用未设置为对象的实例。

我不知道这意味着什么?我认为MVC3 C#提供的默认验证应该有效吗?那有什么不对?有人可以帮忙吗?

/* This line of code is what is provided for validation it is pretty much 
   similar on all the edit, delete and create views. */
@Html.ValidationMessageFor(model => model.Posted)   

2 个答案:

答案 0 :(得分:5)

你对Html.HiddenFor的第二个参数看起来不对。如果要设置值,请尝试以下方法:

@{
    Model.Posted = DateTime.Now;
}
@Html.HiddenFor(m => m.Posted)

或者更好的是,在控制器中设置值:

public ActionResult Create()
{
    return View(new NewsItem { Posted = DateTime.Now });
}

然后你可以这样做:

@Html.HiddenFor(m => m.Posted)

评论2后更新

输入的日期是?正确的日期应该是什么?您的问题表明NullReferenceException存在问题(对象引用未设置为对象的实例)。您可能必须为任何人发布NewsItem模型的代码,以便进一步帮助您。

评论4后更新

我没有看到我提供的任何代码改变了任何应用程序功能。如果你不明白NullReferenceException是什么,听起来你已经很长时间没有编程了。所以我会用一粒盐来刺伤我的不正确。

NullReferenceException与验证无关。当您尝试在引用null的变量上调用方法,属性或其他成员时,会发生这种情况。请考虑以下事项:

var myVariable = "Hello, world";
if (DateTime.Now.Year > 2011)
{
    myVariable = null;
}
var anotherVariable = myVariable.Substring(1);

在星期天之前,这段代码可以正常工作。但是,只要时钟在您的时区切换到2012,它就会开始抛出NullReferenceException。为什么?因为当年份是2012年(或更高)时,您的代码基本上会这样做:

null.SubString(1);

如果这不能帮助你弄清楚你的NullReferenceException来自哪里,那么我们就需要召唤一个通灵者。当然,除非您发布更多代码。

答案 1 :(得分:0)

让我们保持简单:

  • 删除视图中对Model.Posted的任何引用,
  • 在控制器的Post Create操作中将Posted属性设置为DateTime.Now()。