MvcMusicStore教程如何让编辑模板视图起作用?

时间:2010-06-21 21:56:21

标签: c# asp.net asp.net-mvc

我是MvcMusicStore tutorial的第四部分。

我刚刚创建了我的编辑模板视图并将其放在Views / Shared文件夹中。问题是我无法弄清楚如何使其发挥作用。

我的控制器操作是:

public ActionResult Edit(int id)
{
    var viewModel = new StoreManagerViewModel
    {
        Album = storeDB.Albums.Single(a => a.AlbumId == id),
        Genres = storeDB.Genres.ToList(),
        Artists = storeDB.Artists.ToList()
    };
    return View();
}

我的共享编辑视图是(Album.ascx):

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MvcMusicStore.Models.Album>" %>
<%@ Import Namespace="MvcMusicStore"%>

<% using (Html.BeginForm()) {%>
    <%: Html.ValidationSummary(true) %>

    <fieldset>
        <legend>Fields</legend>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.AlbumId) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.AlbumId) %>
            <%: Html.ValidationMessageFor(model => model.AlbumId) %>
        </div>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.GenreId) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.GenreId) %>
            <%: Html.ValidationMessageFor(model => model.GenreId) %>
        </div>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.ArtistId) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.ArtistId) %>
            <%: Html.ValidationMessageFor(model => model.ArtistId) %>
        </div>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.Title) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.Title) %>
            <%: Html.ValidationMessageFor(model => model.Title) %>
        </div>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.Price) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.Price, String.Format("{0:F}", Model.Price)) %>
            <%: Html.ValidationMessageFor(model => model.Price) %>
        </div>

        <div class="editor-label">
            <%: Html.LabelFor(model => model.AlbumArtUrl) %>
        </div>
        <div class="editor-field">
            <%: Html.TextBoxFor(model => model.AlbumArtUrl) %>
            <%: Html.ValidationMessageFor(model => model.AlbumArtUrl) %>
        </div>

        <p>
            <input type="submit" value="Save" />
        </p>
    </fieldset>

<% } %>

<div>
    <%: Html.ActionLink("Back to List", "Index") %>
</div>

我的相册编辑视图是:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcMusicStore.ViewModels.StoreManagerViewModel>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Edit
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<h2>Edit</h2>

<% using (Html.BeginForm()) {%>
<%: Html.ValidationSummary(true) %>

<fieldset>
    <legend>Edit Album</legend>
    <%: Html.EditorFor(model => model.Album,
        new { Artists = Model.Artists, Genres = Model.Genres}) %>
    <p>
        <input type="submit" value="Save" />
    </p>
</fieldset>

<% } %>

    <div>
        <%: Html.ActionLink("Back to List", "Index") %>
    </div>

</asp:Content>

当我运行/ StoreManager / Edit / 386时出现此错误:

  

对象引用未设置为对象的实例。   描述:执行当前web&gt;请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误的更多信息以及它在代码中的起源位置。

     

异常详细信息:System.NullReferenceException:未将对象引用设置为&gt;对象的实例。

     

来源错误:

     

第14行:   第15行:编辑相册   第16行:&lt;%:Html.EditorFor(model =&gt; model.Album,   第17行:新{Artists = Model.Artists,Genres = Model.Genres})%&gt;   第18行:

我完成了项目完成的源代码,据我所知,我的源代码与他们的相同。关于可能导致这种情况的任何想法?

1 个答案:

答案 0 :(得分:1)

是的......在转向StackOverflow找出问题之前,还需要5分钟。我的控制器应该已经返回return View(viewModel);但我最初使用return View();