2010-12-10 4 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를 통해 가져와야합니다.

"ManageNewsArticles"메서드에서 db.SaveChanges();을 호출하지만 db를 통해로드 된 객체가 없으므로 행이 업데이트되지 않습니다.

업데이트하려는 모든 뉴스를 가져 와서 Controller.UpdateModel 메서드를 사용하여 실제 인스턴스를 업데이트 한 다음 db.SaveChanges();을 호출하여 변경 내용을 유지하십시오. 나는 복잡한 객체의 목록에 EditorFor를 사용 해본 적이 한

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

엔티티 프레임 워크를 사용하고 있습니다. 솔직히 나는 구원 절차의 일부를 끝내지 못했습니다. 나는 단지 그곳을 refrence 위해 넣었다. 내 견해에서 데이터를 되 찾을 때까지는 끝내기 싫었습니다. 그리고 Entity 프레임 워크에서 db 객체 내에 아직 데이터가로드되지 않았습니까? –

+0

아, 미안합니다 : 피곤합니다 :) ViewModel 정의를 게시하십시오. – alexn

+0

은 뷰 모델 –

0

보십시오. MVC는 NewsArticle 객체를 NewsViewModel 객체로 다시 어셈블 할 수있는 방식으로 인코딩 할 수 없다고 추측합니다. 파이어 버그와 같은 것을 사용하여 실제로 POST이 어떤 모습인지 보셨습니까? 쿼리 매개 변수 키와 값은 무엇입니까?

간단히 IEnumerable<NewsArticle>을 가져 와서 ManageNewsArticles 메서드에서 사용하는 것과 동일한 논리를 사용하여 다시 구문 분석 할 수 있습니다. 그에게 총을 줘서 우리가 당신이 발견 한 것을 알려주십시오.

+0

을 추가했습니다. 뷰 모델은 동작 메서드 매개 변수이므로 필요하지 않습니다. 그러나 그것은 당신에게 오류를 보여줄 수 있습니다. –

관련 문제