我正在尝试将数据从视图发送到控制器的Create方法。但是,当调用create方法时,视图模型参数将获得空值。
在我看来,我想添加一个项目并显示已添加项目的列表。 我试图将数据发送到create方法,但是其视图模型参数正在获取空值。
在下面的代码中,只要单击Create方法,则p.posts的值和p.post为null。我如何在这里获得p.post和p.posts的价值?
控制器方法
public ActionResult Create(PostsViewModel p) {}
查看模型
public class PostsViewModel
{
public IEnumerable<Post> posts;
public Post post;
}
查看
@model NotesWebApplication.ViewModels.PostsViewModel
...
@using (Html.BeginForm()) {
...
@Html.EditorFor(model => model.post.postText, new { htmlAttributes = new { @class = "form-control" } })
...
<input type="submit" value="Create" class="btn btn-default" />
如果要添加Bind,则还应在我的Create方法中添加
[Bind(Include="postText")]
或
[Bind(Include="post.postText")]
更新
我在PostsViewModel类中进行了以下更改
public class PostsViewModel
{
public IEnumerable<Post> posts { get; set; }
public Post post { get; set; }
}
,控制器中的Create方法更改为
[HttpPost]
public ActionResult Create([Bind(Include="post, posts")]PostsViewModel p) {}
这是httpget Create方法的样子
// GET: Posts/Create
public ActionResult Create()
{
PostsViewModel postsViewModel = new PostsViewModel();
postsViewModel.posts = db.Posts;
postsViewModel.post = new Post();
return View(postsViewModel);
}
现在,当我在控制器参数中提交表单p.post时,它会收到所需的值。但是p.posts仍然为空。为什么会发生这种情况?
答案 0 :(得分:0)
我想原因是您没有post对象的实例。尝试使您的viewModel像这样:
public class PostsViewModel
{
public string PostText {get;set;} // don`t forget to make it like property, not just a field
}
,然后在您的控制器中创建一个实例:
public ActionResult Create(PostsViewModel p)
{
Post post = new Post{ postText = p.PostText};
//and do what you want with it
}