2011-01-05 74 views
0

我有以下的在我的HomeController中创建方法:ASP.NET MVC创建方法

[AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Create([Bind(Exclude = "Id")]Article articleToCreate) 
     { 
      if (!ModelState.IsValid) 
       return View(); 

      try 
      { 
       _db.AddToArticleSet(articleToCreate); 
       _db.SaveChanges(); 

       return RedirectToAction("Index"); 
      } 
      catch 
      { 
       return View(); 
      } 
     } 

,这里是视图:

<% using (Html.BeginForm()) {%> 

     <fieldset> 
      <legend>Fields</legend> 
      <p> 
       <label for="headline">Headline</label> 
       <%= Html.TextBox("headline") %> 
      </p> 
      <p> 
       <label for="story">Story</label> 
       <%= Html.TextArea("story") %> 
      </p> 
      <p> 
       <label for="image">Image URL</label> 
       <%= Html.TextBox("image") %> 
      </p> 
      <p> 
       <input type="submit" value="Create News Story" /> 
      </p> 
     </fieldset> 

    <% } %> 

然而,当我点击提交,我刚回到表单(字段仍然填充)和新故事不会创建。任何想法为什么?谢谢。

编辑:我在InnerException {“SqlDateTime溢出。”必须在1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间。“}

+3

你问过你的调试器吗? – driis 2011-01-05 16:50:54

回答

3

只有两种情况会导致这种情况发生。无论你的ModelState是无效的:

if(!ModelState.IsValid) 
    return View(); 

还是有例外试图写入到数据库时被抛出:

catch { return View(); } 

既然你已经在你的视图没有验证的信息,有是否没有视觉反馈或者不是无效的东西。我也无法判断是否有数据库问题。

我会建议在Action方法的开始处设置一个断点并逐步完成。这将告诉你到底是什么问题。

+0

它发生在'catch'部分,并表示更新条目时发生错误。有关详细信息,请参阅innerexception。 – Cameron 2011-01-05 17:07:51

+0

我得到这个错误:{“SqlDateTime overflow。必须在1/1/1753 12:00:00 AM和12/31/9999 11:59:59 PM之间。”} – Cameron 2011-01-05 17:10:04

+0

@Cameron - 考虑到你没有你的视图中的日期选择字段,你没有在你的控制器中设置一个,我会说这是你的问题。 – 2011-01-05 17:19:52

0

在这两种情况下,您返回视图,你不以任何方式返回出了什么问题。因此,无论您的模型状态是无效还是保存到数据库失败.....

0

由于您在创建文章时发生任何异常,因此您将永远不会在此阶段发生错误。 (See Elmah for a very, very easy way to log all of your errors

您是否尝试过在该方法中设置断点并查看真正发生了什么?我敢打赌,你的模型状态是无效的,或者你正在得到一个异常。

略相关 - 没有你的回报方式:

return View(); 

return RedirectToAction("Index"); 

// and the last one 
return View(); 

传递任何模型数据视图,所以你不会看到有一个验证错误的情况下,你的任何字段值。