我在HomeController中有以下创建方法:
[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之间。”}
答案 0 :(得分:3)
只有两种情况会导致这种情况发生。您的ModelState无效:
if(!ModelState.IsValid)
return View();
或者在尝试写入db时会抛出异常:
catch { return View(); }
由于您的视图中没有验证消息,因此无法确定某些内容是否无效。我也无法判断是否存在数据库问题。
我建议在Action方法的开头设置一个断点并逐步执行。这将告诉你究竟是什么问题。
答案 1 :(得分:0)
在您返回视图的两种情况下,您都不会以任何方式返回错误。因此,您的模型状态无效或保存到数据库失败.....
答案 2 :(得分: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();
将任何模型数据传递给视图,因此在出现验证错误的情况下,您将看不到任何字段值。