2010-12-13 2 views
1

Хорошо, вот моя проблема. На мой взгляд, я пытаюсь передать мою модель просмотра, в которой есть несколько списков. Тогда, на мой взгляд, мне нужно отредактировать другой список. Затем в моем посте мне нужно сохранить изменения. Хотя, когда я передаю свой viewmodel обратно на мой пост, он пуст! Может кто-нибудь объяснить, что я делаю неправильно? Я не беспокоюсь о сохранении информации прямо сейчас, я просто беспокоюсь о возврате данных к контроллеру. ViewModel имеет значение null, когда я ударил эту часть.Проблемы с передачей ViewModel с данными из View в контроллер

Контроллер

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

Я создал быструю таблицу NewsArticle, содержащий Id и запихивать столбцы, а затем имел следующую форму в представлении:

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

Смежные вопросы