我正在建立一個MVC前端的CMS系統的工作。 CMS系統將爲ASP.NET MVC提供頁面和內容。從調用請求處理程序ASP.NET MVC控制器與一個以上的參數作爲數據
在Global.asax中我註冊了一個自定義的路由處理程序是這樣的:
public class MvcApplication : EPiServer.Global
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.Add(new Route("{*data}", new MvcRouteHandler()));
}
protected void Application_Start()
{
ControllerBuilder.Current.SetControllerFactory(new MvcControllerFactory());
ModelBinders.Binders.Add(typeof(MvcPageData), new PageDataModelBinder());
RegisterRoutes(RouteTable.Routes);
}
}
這是我的路由處理程序看起來像:
public class MvcRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new MvcRequestHandler(requestContext);
}
}
我的MVC請求處理程序:
protected void ProcessRequest(HttpContext httpContext)
{
List<string> pageParams;
// Get the requested page from the CMS
EPiServer.UrlBuilder internalUrlBuilder = GetInternalUrl(httpContext.Request.RawUrl, out pageParams);
MvcPageData mvcPage =
CurrentPageResolver.Instance.GetCurrentPage(internalUrlBuilder.QueryCollection["id"] ??
string.Empty);
string controllerName = mvcPage.ControllerName;
if (pageParams.Count == 0)
{
mvcHandler.RequestContext.RouteData.Values.Add("action", "Index");
}
else
{
mvcHandler.RequestContext.RouteData.Values.Add("action", pageParams[0]);
}
mvcHandler.RequestContext.RouteData.Values.Add("controller", controllerName);
mvcHandler.RequestContext.RouteData.Values["data"] = mvcPage; // This works fine, but I also want to add the remidning pageParams
IController controller = ControllerBuilder.Current.
GetControllerFactory().CreateController(mvcHandler.RequestContext, controllerName);
controller.Execute(mvcHandler.RequestContext);
}
這是一個控制器看起來像今天:
public class StandardController : Controller
{
public ActionResult Index(MvcPageData currentPage)
{
return View(currentPage);
}
}
我的問題是,我希望能夠以一個以上的參數傳遞給控制器,所以我需要改變mvcHandler.RequestContext.RouteData.Values [「數據」]包含某種名單的參數。我已經搜索,但沒有找到解決問題的辦法,也許它很簡單。得到的CONTROLER可能是這個樣子:
公衆的ActionResult指數(MvcPageData當前頁,INT ID,字符串名稱)
任何人知道如何做到這一點?謝謝。
MVC開箱即用,是否有任何理由不使用默認功能? – queen3 2010-04-22 13:28:32
我錯過了模型綁定在MVC中的工作原理。我認爲在調用controller.Execute之前,必須在ProcessRequest中定義發送給控制器的所有數據,事實並非如此。 隨意投票關閉這個問題。 – 2010-04-29 12:34:05