无法弄清楚为什么模型在回发时为空?

时间:2011-11-06 12:02:42

标签: asp.net-mvc

我是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" />

<% } %>

评论模型很简单,看起来像这样(我还没有应用任何验证或其他任何内容):

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
            {

            }
        }

除了发布评论表单时,评论模型为空,一切都按预期工作。我无法弄清楚为什么这是空的。当我查看渲染的局部视图的来源时,我可以看到&#34; Post.ID&#34;使用正确的ID填充,但在提交表单时会丢失。

我错过了一些明显的东西吗?我过去已经设置了与此相似的表格并且工作正常,我无法理解为什么现在不行。提前谢谢。

稍后编辑:

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:0)

添加:

public int PostID {get; set;}

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