2009-10-06 86 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,所以我会让您的控制器调用模型来获取所需的资源,然后根据您的控制器视图调用绑定适当的视图。