2009-10-06 83 views
2

如何從數據庫中提取masterpage內容並將其傳遞到masterpage以便我的Views繼承它?這是一個例子:ASP.NET MVC - 從數據庫中提取和填充masterpage內容?

該網站的客戶端將有一個唯一的代碼,可以稱之爲「TargetCode」,例如ABC123,ABC456等......這個唯一代碼將被輸入到查詢字符串中,例如: mysite.com/ABC123。

這些「TargetCode」中的每一個都會有不同的CSS,名稱,地址,電話號碼(對所有頁面通用,所以這些將放在主頁面中)和頁面內容(大約2-3頁,讓我們調用這些頁面Index,Products和MoreInfo)。

因此,當我訪問網站地址mysite.com/ABC123時,首先會查看數據庫,檢查代碼是否存在,如果是的話,它會將主頁信息(css,姓名,地址,電話號碼)並將其用於主頁面。然後,我將爲其他動作提取頁面內容(Index,Products和MoreInfo),當然,所有這些頁面都將使用相同的主頁內容。

非常感謝。

回答

1

這是我目前擁有和它似乎工作,但我不知道這是正確的方式做到這一點:

public override void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    HomeRepository hr = new HomeRepository(); 
    var result = filterContext.Result as ViewResult; 
    if (result == null) 
     return; 

    string TargetCode = string.Empty; 
    Controller control = filterContext.Controller as Controller; 
    System.Collections.Specialized.NameValueCollection query = filterContext.HttpContext.Request.QueryString; 

    if (query.Count > 0 && query["TargetCode"] != null && query["TargetCode"].ToString() != "") 
    { 
     TargetCode = query["TargetCode"].ToString(); 
    } 

    if (string.IsNullOrEmpty(TargetCode)) 
     if (control != null) control.HttpContext.Response.Redirect("./NoCode"); 

    if (!hr.CheckTargetCodeExists(TargetCode)) 
    { 
     if (control != null) control.HttpContext.Response.Redirect("./InvalidCode"); 
    } 
    var ThemeData = hr.GetMasterPageContent(TargetCode); 
    result.ViewData["ThemeData"] = ThemeData; 
} 

我應該使用OnActionExecuting()或OnActionExecuted( )?

1

您的主人也可以接受母版System.Web.Mvc.ViewMasterPage.MasterViewModel,所以我會讓您的控制器調用模型來獲取所需的資源,然後根據您的控制器視圖調用綁定適當的視圖。