如果我爲包含標題,圖像和內容的框創建PartialView,那麼在不使用數據庫的情況下存儲內容的最佳方式是什麼?ASP.NET MVC中的可重用內容框數據?
例子:TurboTax
我懷疑在側邊欄框的內容被存儲在數據庫中,但使可重用的代碼將是有益創建一個PartialView結構和填充內容區域。我可以創建一個PartialView,並將一個Model從父控制器傳遞給PartialView,但如果我想在另一個頁面上使用相同的框,我會被卡住並複製粘貼相同的內容。
如果我爲包含標題,圖像和內容的框創建PartialView,那麼在不使用數據庫的情況下存儲內容的最佳方式是什麼?ASP.NET MVC中的可重用內容框數據?
例子:TurboTax
我懷疑在側邊欄框的內容被存儲在數據庫中,但使可重用的代碼將是有益創建一個PartialView結構和填充內容區域。我可以創建一個PartialView,並將一個Model從父控制器傳遞給PartialView,但如果我想在另一個頁面上使用相同的框,我會被卡住並複製粘貼相同的內容。
對於固定的內容,你可能要考慮使用XML + XSLT甚至文件系統中的HTML片段,並簡單地渲染它們。 HtmlHelper方法可能比部分視圖更有意義 - Html.RenderXml()或Html.Include()。這些和部分視圖唯一真正的區別是視圖引擎沒有被調用,因爲沒有任何替換。我按照我的隱私政策和條款和條件做這類事情。我當然會考慮保留這些緩存。
如果這些真的是模板,你只是替換內容,那麼我認爲局部視圖效果很好,我會考慮將數據庫中的數據,再次,也許使用的緩存,如果我發現遭受了性能。你可以將它與前者結合使用 - 比如說將你的images/xml保存在文件系統中,並在數據庫中保存一個指向它們的指針,這樣你就知道在部分文件中挑選哪些文件。
將數據傳遞到局部視圖,在很多地方使用可以通過多種方式來實現:
創建所有模型的基礎模型類。在基類中定義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()); %>
你能否提供一些你想避免使用數據庫的信息?這很可能是最好的解決方案。 – tvanfosson 2009-11-26 06:09:50