2010-12-13 5 views
1

Ok, hier ist mein Problem. Ich versuche, ein Ansichtsmodell von mir zu übergeben, das mehrere Listen enthält. Dann muss ich meiner Meinung nach die andere Liste bearbeiten. Dann auf meinem Post muss ich die Änderungen speichern. Obwohl, wenn ich mein Viewmodel zurück zu meinem Post gebe, ist es leer! Kann jemand erklären, was ich falsch mache? Ich bin nicht besorgt über das Speichern der Informationen jetzt, ich bin nur besorgt über die Daten zurück zum Controller zu bekommen. Das ViewModel ist null, wenn ich diesen Teil anklicke.Probleme beim Übergeben von ViewModel mit Daten von View to Controller

-Controller

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); 
    } 

hier ist meine Ansicht

<%@ 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 

Antwort

2

Ich konnte nicht Ihrer Ansicht nach richtig angezeigt werden, die EditorForModel Syntax, jedoch habe ich replizieren Ihr Problem und fand diesen Artikel, der eine Möglichkeit bietet, es zu lösen:

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

Ich habe eine schnelle Tabelle Newsartikel Id und Stuff Spalten enthält, und hatte dann das folgende Formular in der Ansicht:

<% 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> 
<% } %> 

und die Elemente in der Liste wurden, als geschrieben geben. Ich fand auch, dass Sie vorher Html.BeginForm (Model) hatten, was, wenn ich es hinzufügte, nichts verursachte, in dem Ansichtsmodell durchgereicht zu werden - ich bin nur ein Neuling zu MVC, also weiß ich nicht, warum dies geschieht, aber mein Code unten arbeitete nur mit Html.BeginForm() und nicht Html.BeginForm (Model).

Ich hoffe, das hilft.

+0

Wenn ich rennen und dich umarmen könnte würde ich! Das hat funktioniert! Ich bin seit ca. 3 Tagen verrückt geworden. –

+0

Bin froh das du es jetzt sortiert hast. – JayneT

Verwandte Themen