【问题标题】:Can't figure out why model is null on postback?无法弄清楚为什么模型在回发时为空?
【发布时间】:2011-11-06 12:02:41
【问题描述】:

我是 ASP.NET MVC 的新手,我正在尝试创建一个非常简单的博客类型网站,以此来了解一切是如何工作的。但是,当我从评论表单发布到一个为空的模型时,我遇到了问题,我不知道为什么。

在博客文章页面上,我有一个“添加评论”链接,该链接调用一些 JQuery 来呈现对 CommentModel 进行强类型化的部分视图。链接也传递了博客文章的 ID,部分代码如下:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Blog.Models.CommentModel>" %>

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

    <%: Html.HiddenFor(x => x.Post.ID) %>
    <%: Html.HiddenFor(x => x.CommentID) %>

    <%: Html.TextBoxFor(x => x.Name) %><br />
    <%: Html.TextBoxFor(x => x.Email) %><br />
    <%: Html.TextBoxFor(x => x.Website) %><br />
    <%: Html.TextAreaFor(x => x.Comment) %><br />

    <input type="submit" value="submit" />

<% } %>

CommentsModel 很简单,看起来像这样(我还没有应用任何验证或任何东西):

public class CommentModel
    {
        public BlogPost Post { get; set; }
        public int CommentID { get; set; }

        public string Name { get; set; }
        public string Email { get; set; }
        public string Website { get; set; }
        public string Comment { get; set; }
    }

然后应该发布到一个简单的控制器操作,该操作会将评论添加到数据库并将用户返回到页面。为简单起见,我删除了大部分代码,但看起来类似于:

[HttpPost]
        public ActionResult CommentForm(CommentModel model)
        {
            if (ModelState.IsValid)
            {

            }
            else
            {

            }
        }

一切都按预期工作,除了在发布评论表单时,评论模型为空。我不知道为什么这是空的。当我查看渲染部分视图的来源时,我可以看到“Post.ID”填充了正确的 ID,但是在提交表单时会丢失。

我在这里遗漏了一些明显的东西吗?我过去设置了类似的表格,效果很好,我不明白为什么现在不行。提前致谢。

稍后编辑:

我输入了错误的代码并将导致问题的 public ActionResult CommentForm(CommentModel model)public ActionResult CommentForm(CommentModel comment) 更改。

感谢您的帮助。

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    昨天已经回答了类似的问题。签出:MVC3 - Insert using ViewModel - Object reference not set to an instance of an object

    我可以看到的问题是,当表单发布时,Post.ID 和 CommentID 被传递,而您的操作需要一个完整的“CommentModel”类型的对象。模型绑定器无法将发布数据映射到相应的模型对象中。

    【讨论】:

    • 感谢您发布此内容,我能够从该答案中解决问题。我仔细检查了我的代码,问题是我将控制器帖子设置为(CommentsModel 评论) - 这不起作用......愚蠢的错误!感谢您的帮助。
    【解决方案2】:

    添加:

    public int PostID {get; set;}
    

    ...添加到您的模型中,并将其作为隐藏输入填充到您的控制器中。 Post 对象不会轻易解析。

    【讨论】:

      猜你喜欢
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 2022-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多