Asp.net mvc 将带有数据的ViewModel从视图传递到控制器时出现问题
好的,这是我的问题。我正在尝试将我的视图模型(其中包含多个列表)传递给我的视图。然后在我看来,我需要编辑不同的列表。然后在我的帖子上,我需要保存编辑。不过,当我将viewmodel传递回帖子时,它是空的!有人能解释一下我做错了什么吗?我现在不担心保存信息,我只是担心将数据返回控制器。当我点击该部分时,ViewModel为空 控制器Asp.net mvc 将带有数据的ViewModel从视图传递到控制器时出现问题,asp.net-mvc,Asp.net Mvc,好的,这是我的问题。我正在尝试将我的视图模型(其中包含多个列表)传递给我的视图。然后在我看来,我需要编辑不同的列表。然后在我的帖子上,我需要保存编辑。不过,当我将viewmodel传递回帖子时,它是空的!有人能解释一下我做错了什么吗?我现在不担心保存信息,我只是担心将数据返回控制器。当我点击该部分时,ViewModel为空 控制器 public ActionResult ManageNewsArticles() { NewsViewModel newsViewMo
public ActionResult ManageNewsArticles()
{
NewsViewModel newsViewModel = new NewsViewModel();
newsViewModel.ListBreakingNews = db.NewsArticles.Where(n => n.PageSetupID == 1).ToList<NewsArticle>();
newsViewModel.ListMainArticle = db.NewsArticles.Where(n => n.PageSetupID == 2).ToList<NewsArticle>();
newsViewModel.ListSubNews1 = db.NewsArticles.Where(n => n.PageSetupID == 3).ToList<NewsArticle>();
newsViewModel.ListSubNews2 = db.NewsArticles.Where(n => n.PageSetupID == 4).ToList<NewsArticle>();
newsViewModel.ListSubNews3 = db.NewsArticles.Where(n => n.PageSetupID == 5).ToList<NewsArticle>();
return View(newsViewModel);
}
[HttpPost]
public ActionResult ManageNewsArticles(NewsViewModel newsViewModel)
{
if (ModelState.IsValid)
{
db.SaveChanges();
return RedirectToAction("Admin");
}
return View(newsViewModel);
}
这是我的看法
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<TrueNews.ViewModels.NewsViewModel>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Manage News Articles
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<h2>Manage News Articles</h2>
<% Html.EnableClientValidation(); %>
<% using (Html.BeginForm(Model)) {%>
<%: Html.ValidationSummary(true) %>
<fieldset>
<%: Html.EditorForModel(Model) %>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back to Admin Controls", "Admin") %>
</div>
</asp:Content>
新闻视图模型
public class NewsViewModel
{
public List<NewsArticle> ListBreakingNews { get; set; }
public List<NewsArticle> ListMainArticle { get; set; }
public List<NewsArticle> ListSubNews1 { get; set; }
public List<NewsArticle> ListSubNews2 { get; set; }
public List<NewsArticle> ListSubNews3 { get; set; }
} // End of Class
我无法使用EditorForModel语法使您的视图正确显示,但是我复制了您的问题,并发现本文提供了一种解决方法: 我创建了一个包含Id和Stuff列的quick table NewsArticle,然后在视图中具有以下表单:
<% using (Html.BeginForm())
{%>
<%: Html.ValidationSummary(true) %>
<fieldset>
<% for (int i = 0; i < Model.ListBreakingNews.Count; i++)
{ %>
<div>
Id</div>
<div>
<%= Html.TextBox(string.Format("ListBreakingNews[{0}].Id", i), Model.ListBreakingNews[i].Id) %>
</div>
<div>
Name</div>
<div>
<%= Html.TextBox(string.Format("ListBreakingNews[{0}].Stuff", i), Model.ListBreakingNews[i].Stuff) %>
</div>
<% } %>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
<% } %>
列表中的项目在发布时被传递。我还发现,以前您有Html.BeginFormModel,当我添加它时,它不会在视图模型中传递任何信息-我只是MVC的新手,所以我不知道为什么会发生这种情况,但我下面的代码只使用Html.BeginForm,而不是Html.BeginFormModel
我希望这有帮助。如果我能跑过去拥抱你,我会的!成功了!我已经为此疯狂了三天了。很高兴你现在把它整理好了。