基本控制器类

时间:2010-02-01 14:53:27

标签: asp.net-mvc

我有一个基本控制器类,我想将一个消息从Base类传递给所有控制器,并且该消息可供所有视图使用。

我在下面创建了一个基本版本......

部门控制器

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好的解决方案部分,如果有帮助的话。

认为我现在已经使用了以下代码在我的sectionController ...

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

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

    }
}

这是一个好的解决方案吗?

3 个答案:

答案 0 :(得分:0)

HomeController.Index没有调用SectionController.Section。

答案 1 :(得分:0)

您是在基本控制器的ViewData操作方法中设置Section,是否真的想在基本控制器的构造函数中设置它?

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

答案 2 :(得分:0)

因为没有任何请求被映射到SectionController中的动作“Section”。如果你映射了一个像domain / Section / Section这样的请求,你会在视图中看到你的消息(假设你使用的是默认路由并且有一个名为“Section”的视图)。

您需要做的是,将消息放入每次运行操作时运行的方法的viewdata中。您可以在OnActionExecuting中执行此操作,如:

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