我是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)
。
感谢您的帮助。
答案 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对象不会轻易解析。