2010-12-10 74 views
2

好的,這是我的問題。我正在嘗試將我的視圖模型傳遞給我的視圖,該模型中包含多個列表。然後在我看來,我需要編輯不同的列表。然後在我的帖子上,我需要保存編輯。雖然,當我將viewmodel傳遞迴我的帖子時,它是空的!有人可以解釋我做錯了什麼嗎?將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

我們還需要視圖模型的代碼 – CrazyDart 2010-12-10 22:04:24

+0

剛剛添加了視圖模型,沒什麼特別的。 – 2010-12-10 22:18:06

+0

嘗試初始化視圖模型構造函數中的列表。 – 2010-12-13 22:34:39

回答

0

首先,我假設你使用LINQ2SQL或類似的東西。

爲了更新數據庫中的對象,必須通過DataContext獲取該對象。

在你調用db.SaveChanges();的方法「ManageNewsArticles」中,但由於沒有通過db加載的對象,所以沒有行會被更新。

解決方法是獲取所有想更新的新聞,然後使用Controller.UpdateModel方法更新您的實際實例,然後撥打db.SaveChanges();以保留您的更改。

+0

我正在使用實體框架。說實話,我真的沒有完成保存過程的那部分。我只是把它放在那裏作爲參考。直到我從我的觀點獲取數據時,我纔想完成。而使用Entity框架不會將數據仍然加載到數據庫對象中? – 2010-12-10 22:10:34

+0

對不起,一定很累:)請發表您的ViewModel定義。 – alexn 2010-12-10 22:12:17

+0

剛剛添加了視圖模型 – 2010-12-10 22:17:26

0

嘗試使用

UpdateModel(NewsViewModel); 
db.SaveChanges(); 
return RedirectToAction("Admin"); 
+0

它應該沒有必要,因爲視圖模型是一個操作方法參數。但它可能會顯示錯誤。 – 2010-12-13 22:33:35

0

複雜對象的列表使用EditorFor我從來沒有嘗試過。我猜測MVC無法編碼你的對象,因爲它們可以被重新組裝成一個NewsViewModel對象。你有沒有試過用Firebug之類的東西來看看實際的POST是什麼樣的?什麼是查詢參數鍵和值?

您或許可以簡單地採取IEnumerable<NewsArticle>,然後使用您在ManageNewsArticles方法中使用的相同邏輯重新解析該問題。給一個鏡頭,讓我們知道你發現了什麼。

相關問題