ASP.NET MVC创建方法

时间:2011-01-05 16:48:19

标签: asp.net-mvc

我在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之间。”}

3 个答案:

答案 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();

将任何模型数据传递给视图,因此在出现验证错误的情况下,您将看不到任何字段值。