Asp.net mvc 将ViewModel从视图传递到控制器
好的,这是我的问题。我正在尝试将我的视图模型(其中包含多个列表)传递给我的视图。然后在我看来,我需要编辑不同的列表。然后在我的帖子上,我需要保存编辑。不过,当我将viewmodel传递回帖子时,它是空的!有人能解释一下我做错了什么吗 控制器Asp.net mvc 将ViewModel从视图传递到控制器,asp.net-mvc,asp.net-mvc-2,Asp.net Mvc,Asp.net Mvc 2,好的,这是我的问题。我正在尝试将我的视图模型(其中包含多个列表)传递给我的视图。然后在我看来,我需要编辑不同的列表。然后在我的帖子上,我需要保存编辑。不过,当我将viewmodel传递回帖子时,它是空的!有人能解释一下我做错了什么吗 控制器 public ActionResult ManageNewsArticles() { NewsViewModel newsViewModel = new 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);
}
public ActionResult managenewsacts()
{
NewsViewModel NewsViewModel=新的NewsViewModel();
newsViewModel.ListBreakingNews=db.NewsArticles.Where(n=>n.PageSetupID==1.ToList();
newsViewModel.ListMainArticle=db.NewsArticles.Where(n=>n.PageSetupID==2.ToList();
newsViewModel.ListSubNews1=db.NewsArticles.Where(n=>n.PageSetupID==3.ToList();
newsViewModel.ListSubNews2=db.NewsArticles.Where(n=>n.PageSetupID==4.ToList();
newsViewModel.ListSubNews3=db.NewsArticles.Where(n=>n.PageSetupID==5.ToList();
返回视图(newsViewModel);
}
[HttpPost]
公共操作结果管理新闻文章(NewsViewModel NewsViewModel)
{
if(ModelState.IsValid)
{
db.SaveChanges();
返回重定向到操作(“管理”);
}
返回视图(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
公共类NewsViewModel
{
公共列表ListBreakingNews{get;set;}
公共列表ListMainArticle{get;set;}
公共列表ListSubNews1{get;set;}
公共列表ListSubNews2{get;set;}
公共列表ListSubNews3{get;set;}
}//下课
首先,我假设您使用linq2sql或类似的东西
为了更新数据库中的对象,必须通过DataContext获取该对象
在方法“ManageNewsArticles”中,您正在调用db.SaveChanges()代码>但由于没有通过db加载对象,因此不会更新任何行
解决方法是获取所有要更新的新闻,然后使用Controller.UpdateModel
方法更新实际实例,然后调用db.SaveChanges()代码>以保持更改。首先,我假设您使用linq2sql或类似的东西
为了更新数据库中的对象,必须通过DataContext获取该对象
在方法“ManageNewsArticles”中,您正在调用db.SaveChanges()代码>但由于没有通过db加载对象,因此不会更新任何行
解决方法是获取所有要更新的新闻,然后使用Controller.UpdateModel
方法更新实际实例,然后调用db.SaveChanges()编码>以保留更改。尝试使用
UpdateModel(NewsViewModel);
db.SaveChanges();
return RedirectToAction("Admin");
尝试使用
UpdateModel(NewsViewModel);
db.SaveChanges();
return RedirectToAction("Admin");
我从未尝试在复杂对象列表上使用EditorFor
。我猜MVC无法将您的新闻文章
对象编码为可以重新组装为新闻视图模型
对象的方式。您是否尝试过使用Firebug之类的工具来查看实际的POST
外观?查询参数键和值是什么
您可以简单地获取一个IEnumerable
,然后使用ManageNewsArticles方法中使用的相同逻辑重新解析它。试一试,让我们知道你发现了什么。我从未尝试在复杂对象列表上使用EditorFor
。我猜MVC无法将您的新闻文章
对象编码为可以重新组装为新闻视图模型
对象的方式。您是否尝试过使用Firebug之类的工具来查看实际的POST
外观?查询参数键和值是什么
您可以简单地获取一个IEnumerable
,然后使用ManageNewsArticles方法中使用的相同逻辑重新解析它。试一试,让我们知道你发现了什么。我们需要viewmodel的代码刚刚添加了视图模型,没有什么特别的,初始化视图模型构造函数中的列表。我们需要viewmodel的代码刚刚添加了视图模型,初始化视图模型构造函数中的列表没有什么特别之处。我使用的是实体框架。老实说,我真的没有完成那部分的保存过程。我只是把它放在那里作为参考。在从视图中获取数据之前,我不想完成这项工作。如果使用实体框架,数据不会仍然加载到db对象中吗?啊,对不起,一定很累:)请发布您的ViewModel定义。我使用的是实体框架。老实说,我真的没有完成那部分的保存过程。我只是把它放在那里作为参考。在从视图中获取数据之前,我不想完成这项工作。如果使用实体框架,数据不会仍然加载到db对象中吗?啊,很抱歉,一定很累:)请发布您的ViewModel定义。这应该不是必需的,因为ViewModel是一个action方法参数。但它可能会向您显示错误,因为视图模型是一个动作方法参数,所以不需要这样做。但它可能会向您显示错误。