我無法爲基本控制器獲取值。我想要做的是讓我的基礎控制器從ActionLink獲取一個ID?基本控制器獲取值
鏈接
<%= Html.ActionLink("About Us", "About", new { SectionId = 1 })%>
基本控制器
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 SectionController(int SectionId)
{
if (SectionId == 1)
{
ViewData["Message"] = "GOT AN ID";
}
else
{
ViewData["Message"] = "NO ID";
}
}
}
}
家庭控制器
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Website.Controllers
{
[HandleError]
public class HomeController : SectionController
{
public ActionResult Index()
{
return View();
}
public ActionResult About()
{
return View();
}
public ActionResult Contact()
{
return View();
}
}
}
解決方案到目前爲止
ActionLink的
<%= Html.ActionLink("About Us", "About", new { SectionId = 1})%>
SectionAttribute.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace Website.ActionFilters
{
public class SectionAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// Actions have sectionId parameter
object SectionId = filterContext.ActionParameters.FirstOrDefault(x => x.Key == "SectionId").Value;
if (SectionId != null && (int)SectionId == 1)
{
filterContext.Controller.ViewData["Message"] = "GOT AN ID";
}
else
{
filterContext.Controller.ViewData["Message"] = "NO ID";
}
}
}
}
SectionController
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Website.ActionFilters;
namespace Website.Controllers
{
[Section]
public class SectionController : Controller
{
}
}
查看
<%= Html.Encode(ViewData["Message"]) %>
+1更好的是,我們可以將它從基類中移出並放入一個action-filter/attribute讓它更優雅?謝謝 – 2010-02-02 12:58:36
感謝您的幫助。我正在嘗試代碼,但我在OnActionExecuting上得到下面的錯誤。 錯誤'Website.Controllers.SectionController.OnActionExecuting(System.Web.Mvc.ActionExecutingContext)':當重寫'受保護的'繼承的成員'時,不能更改訪問修飾符'System.Web.Mvc.Controller.OnActionExecuting(System.Web .Mvc.ActionExecutingContext)' – Jemes 2010-02-02 14:15:22
OnActionExecuted在控制器和公共過濾器中保護了修飾符 - 我已經修復了我的答案 – 2010-02-02 14:32:48