【问题标题】:ASP.NET MVC Create MethodASP.NET MVC 创建方法
【发布时间】:2011-01-05 16:48:18
【问题描述】:

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

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

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

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

    或者尝试写入数据库时​​抛出异常:

    catch { return View(); }
    

    由于您的视图中没有验证消息,因此对于某些内容是否无效没有视觉反馈。我也无法判断是否存在数据库问题。

    我建议在 Action 方法的开头设置一个断点并单步执行。这会告诉你到底是什么问题。

    【讨论】:

    • 它发生在catch 部分,并表示更新条目时发生错误。有关详细信息,请参阅内部异常。
    • 我收到此错误:{"SqlDateTime 溢出。必须介于 1/1/1753 12:00:00 AM 和 12/31/9999 11:59:59 PM 之间。"}
    • @Cameron - 考虑到您的视图中没有日期选择字段并且您没有在控制器中设置一个,我会说这是您的问题。
    • 好吧,我只想将发布的值设置为当前日期。我怎么做?谢谢。
    • articleToCreate.WhateverThePropertyIs = DateTime.Now;
    【解决方案2】:

    在您返回视图的这两种情况下,您都不会以任何方式返回问题所在。因此,您的模型状态无效或保存到数据库失败.....

    【讨论】:

      【解决方案3】:

      由于您正在处理创建文章时发生的任何异常,因此在此阶段您将永远不会遇到错误。 (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();
      

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

      【讨论】:

        猜你喜欢
        • 2014-04-02
        • 1970-01-01
        • 2011-04-22
        • 2017-10-30
        • 1970-01-01
        • 1970-01-01
        • 2015-05-30
        • 1970-01-01
        • 2019-03-17
        相关资源
        最近更新 更多