2010-12-13 18 views
1

これは私の問題です。私は私の視点に、複数のリストを持つ私のビューモデルを渡そうとしています。私の見解では、別のリストを編集する必要があります。それから私のポストで私は編集を保存する必要があります。私のビューモデルを私のポストに戻すと、それは空です!誰かが私が間違っていることを説明することはできますか?私は今、情報を保存することを心配していません、私はちょうどコントローラにデータを取得することを心配しています。 ViewModelは、その部分にヒットするとnullです。問題ビューからコントローラへのデータを含む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 

答えて

2

私はEditorForModel構文を使用して正しく表示するビューを得ることができませんでした、しかし、私は複製しませんでしたあなたの問題とそれを解決する一つの方法を提供するこの記事が見つかりました:

http://weblogs.asp.net/nmarun/archive/2010/03/13/asp-net-mvc-2-model-binding-for-a-collection.aspx

私は、IDとスタッフの列を含む迅速なテーブル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.BeginForm(Model)を追加したときに、ビューモデルでは何も渡されなかったことがわかりました - MVCの初心者にすぎないので、なぜこのようなことが起こるのか分かりませんが、 Html.BeginForm()ではなくHtml.BeginForm(Model)でのみ使用できます。

こちらがお役に立てば幸いです。

+0

もし私が走って、あなたを抱き締めることができたら、私はそうするでしょう!それはうまくいった!私はそれについて約3日間狂っている。 –

+0

あなたはそれを今すぐ選別してうれしいです。 – JayneT

関連する問題