2010-12-10 26 views
2

これは私の問題です。私は私の視点に、複数のリストを持つ私のビューモデルを渡そうとしています。私の見解では、別のリストを編集する必要があります。それから私のポストで私は編集を保存する必要があります。私のビューモデルを私のポストに戻すと、それは空です!誰かが私が間違っていることを説明することはできますか?ビューからコントローラへ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

+0

ビューモデルが追加されました。特別なものはありません –

+0

ビューモデルコンストラクタでリストを初期化してみてください。 –

答えて

0

まず第一に、私はあなたがlinq2sqlまたは類似のものを使用することを前提としています。

データベース内のオブジェクトを更新するには、そのオブジェクトをDataContextを通してフェッチする必要があります。

db.SaveChanges();というメソッドを "ManageNewsArticles"の中に入れていますが、dbを通じてオブジェクトがロードされていないので、ローは更新されません。

これを解決するには、更新するすべてのニュースを取得し、Controller.UpdateModelメソッドを使用して実際のインスタンスを更新し、db.SaveChanges();を呼び出して変更を維持します。

+0

私はエンティティフレームワークを使用しています。そして正直言って私は実際にセーブプロセスのその部分を終えていませんでした。私はちょうどrefrenceのためにそれを置くちょっと。私は私の見解からデータを取り戻すまで、それを終わらせたくなかった。そして、Entityフレームワークでは、そのデータはまだdbオブジェクト内にロードされませんか? –

+0

ああ、申し訳ありません、疲れている必要があります:) ViewModel定義を投稿してください。 – alexn

+0

ビューモデルを追加したばかりです –

0

は、私は複雑なオブジェクトのリストにEditorForを使用してみたことがありません

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

ビューモデルはアクションメソッドパラメータであるため、これは必須ではありません。しかし、それはあなたにエラーを示すかもしれません。 –

0

を使用してみてください。 MVCがNewsArticleオブジェクトをエンコードして、NewsViewModelオブジェクトに再アセンブリすることができないと推測しています。実際にPOSTのようなものをFirebugのようなものを使って試してみましたか?クエリパラメータのキーと値は何ですか?

IEnumerable<NewsArticle>を受け取り、ManageNewsArticlesメソッドで使用するのと同じロジックを使用して再解析することができます。そのショットを与え、あなたが見つけたものを私たちに知らせてください。

関連する問題