Базовый класс контроллеров - PullRequest
1 голос
/ 01 февраля 2010

У меня есть базовый класс контроллеров, и я хотел бы передать Сообщение из Базового класса всем контроллерам и сделать это сообщение доступным для всех представлений.

Я создал базовую версию ниже ...

Контроллер секции

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Website.Controllers
{
    public class SectionController : Controller
    {
        //
        // GET: /Section/

        public ActionResult Section()
        {
            ViewData["Message"] = "THIS IS A TEST";
            return View();
        }

    }
}

Домашний контроллер

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Website.Controllers
{
    public class HomeController : SectionController
    {
        public ActionResult Index()
        {
            return View();
        }
    }
}

Посмотреть

<%= Html.Encode(ViewData["Message"]) %>

Я знаю, что могу сделать это в домашнем контроллере, но я просто тестирую в мо.

Я не получаю никаких ошибок с вышеприведенным, но я также не отображаю сообщение в моем представлении?

Я использую этот урок http://www.asp.net/LEARN/mvc/tutorial-13-cs.aspx Хорошее решение, если это поможет.

Думаю, у меня это работает, теперь используйте приведенный ниже код в моем разделе Controller ...

namespace Website.Controllers
{
    public class SectionController : Controller
    {
        //
        // GET: /Section/

        public SectionController()
        {
            ViewData["Message"] = "THIS IS A TEST";
            //return View();
        }

    }
}

Это правильное решение?

Ответы [ 3 ]

0 голосов
/ 01 февраля 2010

Вы устанавливаете ViewData в методе действия Section вашего базового контроллера, вы действительно хотите установить его в конструкторе базового контроллера?

public SectionController()
{
    ViewData["Message"] = "THIS IS A TEST";
}
0 голосов
/ 01 февраля 2010

Поскольку ни один из запросов не сопоставлен с действием "Section" в SectionController. Если вы сопоставили запрос как домен / раздел / раздел, вы бы увидели ваше сообщение в вашем представлении (при условии, что вы используете маршрутизацию по умолчанию и у вас есть представление с именем «Раздел»).

Что вам нужно сделать, так это поместить свое сообщение в viewdata в метод, который запускается каждый раз при запуске действия. Вы можете сделать это в OnActionExecuting, как:

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    ViewData["Message"] = "THIS IS A TEST";
    base.OnActionExecuting(filterContext);
}

в SectionController.

0 голосов
/ 01 февраля 2010

HomeController.Index не вызывает SectionController.Section.

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