2011-01-05 75 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(); 

傳遞任何模型數據視圖,所以你不會看到有一個驗證錯誤的情況下,你的任何字段值。