Кодовый файл ASP.NET MVC Masterpage - PullRequest
0 голосов
/ 15 марта 2009

Пожалуйста, кто-нибудь может указать, где этот код может идти не так. Я пытаюсь создать частичный класс для главной страницы.

Класс мастер-страниц:

namespace MuniWeb.Models.SiteMaster{

public class BaseViewData
{
    public string Title { get; set; }
    public string MetaKeywords { get; set; }
    public string MetaDescription { get; set; }
}

public partial class Site : System.Web.Mvc.ViewMasterPage<MuniWeb.Models.SiteMaster.BaseViewData>
{
    public Site()
    {
        ViewData.Model = new BaseViewData();
    }
}}

Главная страница:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<MuniWeb.Models.SiteMaster.BaseViewData>" %>

Ошибка:

Object reference not set to an instance of an object.
Line 33:             <div id="footer">
Line 34:                 ApplicationID:
Line 35:                 <%= Model.Title %>
Line 36:             </div>
Line 37:         </div>

Я просто использую это в качестве примера. Код, который я хочу использовать, должен запускаться для каждой страницы для проверки определенных параметров, поэтому он находится на главной странице.

Ответы [ 3 ]

0 голосов
/ 16 марта 2009

Разве ваша главная страница не должна наследовать сайт, а не System.Web.Mvc.ViewMasterPage? Нет, где определение вашей главной страницы на самом деле ссылается на класс Site.

0 голосов
/ 16 марта 2009

В вашем коде

public partial class Site :  
         System.Web.Mvc.ViewMasterPage<MuniWeb.Models.SiteMaster.BaseViewData>
{
    public Site()
    {
        ViewData.Model = new BaseViewData();
    }
}}

ViewData.Model = new BaseViewData(); не обязательно. BaseViewData должен быть передан через контроллер. Другими словами, все ваши представления должны искать представление, которое наследует базовое представление. На главной странице будет приведен тот же объект, что и в базовом классе BaseViewData. Код вашего контроллера, по-видимому, является правильным при этом.

Еще одна вещь, которая отличается от моего аналогичного кода: Наследует = System.Web.Mvc.ViewMasterPage<MuniWeb.Models.SiteMaster.BaseViewData> должно быть Наследует = my.codebehind.class, тогда ваш код будет наследоваться ViewMasterPage<MuniWeb.Models.SiteMaster.BaseViewData>

Я просто не видел код как таковой, возможно, он работает?

0 голосов
/ 15 марта 2009

Вам не нужно создавать частичный класс. Как выглядит код действия вашего контроллера? Похоже, что ошибка может быть из-за того, что вы не передали представление (и, следовательно, главную страницу) модели.

Попробуйте что-то вроде этого:

namespace MuniWeb.Website.ViewDataModels {

    public class BaseViewData
    {
        public string Title { get; set; }
        public string MetaKeywords { get; set; }
        public string MetaDescription { get; set; }
    }

    public class SubViewData : BaseViewData
    {
        public IList<Thing> Things { get; set; }
    }
}

Затем определите свою главную страницу, как у вас:

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage<MuniWeb.Website.ViewDataModels.BaseViewData>" %>

Теперь в вашем контроллере

public ActionResult Index()
{
    SubViewData viewData = new SubViewData();
    viewData.Title = "Page Title";
    viewData.MetaKeywords = "This, that, and the other";
    viewData.MetaDescription = "A really great page about this, that, and the other.";

    viewData.Things = _myRepository.GetThings();

    return View(viewData);
}

Посмотрите, как это происходит ...

Я бы спросил, почему на MasterPage НУЖНО строго указывать ViewData. Я понимаю, что да, иногда на типовых страницах требуются строго типизированные данные представления, но, как правило, вы должны иметь возможность просто использовать коллекцию значений имени ViewData.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...