Asp.net mvc 将带有数据的ViewModel从视图传递到控制器时出现问题

Asp.net mvc 将带有数据的ViewModel从视图传递到控制器时出现问题,asp.net-mvc,Asp.net Mvc,好的,这是我的问题。我正在尝试将我的视图模型(其中包含多个列表)传递给我的视图。然后在我看来,我需要编辑不同的列表。然后在我的帖子上,我需要保存编辑。不过,当我将viewmodel传递回帖子时,它是空的!有人能解释一下我做错了什么吗?我现在不担心保存信息,我只是担心将数据返回控制器。当我点击该部分时,ViewModel为空 控制器 public ActionResult ManageNewsArticles() { NewsViewModel newsViewMo

好的,这是我的问题。我正在尝试将我的视图模型(其中包含多个列表)传递给我的视图。然后在我看来,我需要编辑不同的列表。然后在我的帖子上,我需要保存编辑。不过,当我将viewmodel传递回帖子时,它是空的!有人能解释一下我做错了什么吗?我现在不担心保存信息,我只是担心将数据返回控制器。当我点击该部分时,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>
新闻视图模型

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

我无法使用EditorForModel语法使您的视图正确显示,但是我复制了您的问题,并发现本文提供了一种解决方法:

我创建了一个包含Id和Stuff列的quick table 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.BeginFormModel,当我添加它时,它不会在视图模型中传递任何信息-我只是MVC的新手,所以我不知道为什么会发生这种情况,但我下面的代码只使用Html.BeginForm,而不是Html.BeginFormModel


我希望这有帮助。

如果我能跑过去拥抱你,我会的!成功了!我已经为此疯狂了三天了。很高兴你现在把它整理好了。