好的,这是我的问题。我试图传递我的视图模型,其中包含多个列表,我的观点。然后在我看来,我需要编辑不同的列表。然后在我的帖子上我需要保存编辑。虽然,当我将我的viewmodel传回我的帖子时,它是空的!有人可以解释我做错了吗?
控制器
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>
NewsViewModel
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
答案 0 :(得分:0)
首先,我假设您使用linq2sql或类似的东西。
为了更新数据库中的对象,必须通过DataContext获取该对象。
在您的方法“ManageNewsArticles”中,您正在调用db.SaveChanges();
,但由于没有通过db加载的对象,因此不会更新任何行。
解决方法是获取您要更新的所有新闻,然后使用Controller.UpdateModel
方法更新您的实际实例,然后致电db.SaveChanges();
以保留您的更改。
答案 1 :(得分:0)
尝试使用
UpdateModel(NewsViewModel);
db.SaveChanges();
return RedirectToAction("Admin");
答案 2 :(得分:0)
我从未尝试在复杂对象列表上使用EditorFor
。我猜测MVC无法对NewsArticle
个对象进行编码,以便可以将它们重新组合成NewsViewModel
个对象。您是否尝试使用类似Firebug的内容来查看实际的POST
是什么样的?什么是查询参数键和值?
您可以简单地使用IEnumerable<NewsArticle>
,然后使用您在ManageNewsArticles方法中使用的相同逻辑重新解析它。试一试,让我们知道你发现了什么。