2009-11-26 40 views
1

如果我爲包含標題,圖像和內容的框創建PartialView,那麼在不使用數據庫的情況下存儲內容的最佳方式是什麼?ASP.NET MVC中的可重用內容框數據?

例子:TurboTax

我懷疑在側邊欄框的內容被存儲在數據庫中,但使可重用的代碼將是有益創建一個PartialView結構和填充內容區域。我可以創建一個PartialView,並將一個Model從父控制器傳遞給PartialView,但如果我想在另一個頁面上使用相同的框,我會被卡住並複製粘貼相同的內容。

+1

你能否提供一些你想避免使用數據庫的信息?這很可能是最好的解決方案。 – tvanfosson 2009-11-26 06:09:50

回答

1

對於固定的內容,你可能要考慮使用XML + XSLT甚至文件系統中的HTML片段,並簡單地渲染它們。 HtmlHelper方法可能比部分視圖更有意義 - Html.RenderXml()或Html.Include()。這些和部分視圖唯一真正的區別是視圖引擎沒有被調用,因爲沒有任何替換。我按照我的隱私政策和條款和條件做這類事情。我當然會考慮保留這些緩存。

如果這些真的是模板,你只是替換內容,那麼我認爲局部視圖效果很好,我會考慮將數據庫中的數據,再次,也許使用的緩存,如果我發現遭受了性能。你可以將它與前者結合使用 - 比如說將你的images/xml保存在文件系統中,並在數據庫中保存一個指向它們的指針,這樣你就知道在部分文件中挑選哪些文件。

1

將數據傳遞到局部視圖,在很多地方使用可以通過多種方式來實現:

創建所有模型的基礎模型類。在基類中定義PartialModel屬性,該屬性將保存部分視圖的模型(如果使用的是部分視圖,可能會有很多模型)。現在,您可以在控制器操作中填充PartialModel屬性,但爲了使代碼更加可重用,您可以創建自己的Action Filter,它將在執行操作方法後(但在將模型傳遞到視圖之前)插入部分視圖數據。

public class PartialViewModelAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
    BaseViewModel model; 

    if (filterContext.Controller.ViewData.Model == null) 
    { 
      model = new BaseViewModel(); 
      filterContext.Controller.ViewData.Model = model; 
    } 
    else 
    { 
     model = filterContext.Controller.ViewData.Model as BaseViewModel; 
    } 

    model.PartialModel = new PartialModel(...) // Partial model initialization 
    base.OnActionExecuted(filterContext); 
    } 
} 

然後你可以使用它像:

[PartialViewModel] 
public ActionResult Index() 
{ 
    //... 
} 

另一種選擇:你可以爲所有的控制器創建BaseController類和基本控制器初始化創建PartialModel。然後PartialModel可以存儲在ViewData []字典中。由於使用ViewData字典中的觀點是壞的,對的HtmlHelper創建擴展方法,如:

public static PartialModel GetPartialModel(this HtmlHelper helper) 
{ 
    return helper.viewContext.ViewData["PartialModel"] as PartialModel 
} 

所以,你可以obtaint的模式是這樣的:

<% Html.RenderPartial("MyPartial", Html.GetPartialModel()); %> 
相關問題