什麼是你的方式傳遞數據到主頁(使用ASP.NET MVC)沒有打破MVC規則?個人而言,我更喜歡編碼抽象控制器(基本控制器)或傳遞給所有視圖的基類。傳遞數據到主頁在ASP.NET MVC
回答
如果你喜歡你的視圖有強類型的視圖數據類,這可能適合你。其他解決方案可能更多正確但這是一個很好的設計和實用性之間的平衡恕我直言。
母版頁需要包含相關的唯一信息的強類型的視圖數據類吧:
public class MasterViewData
{
public ICollection<string> Navigation { get; set; }
}
使用母版頁每個視圖需要包含的信息,並從母版頁獲得一個強類型的視圖數據類查看數據:
public class IndexViewData : MasterViewData
{
public string Name { get; set; }
public float Price { get; set; }
}
因爲我不想單獨的控制器知道把在一起的母版頁數據什麼我封裝了邏輯到被傳遞到每個控制器廠:
public interface IViewDataFactory
{
T Create<T>()
where T : MasterViewData, new()
}
public class ProductController : Controller
{
public ProductController(IViewDataFactory viewDataFactory)
...
public ActionResult Index()
{
var viewData = viewDataFactory.Create<ProductViewData>();
viewData.Name = "My product";
viewData.Price = 9.95;
return View("Index", viewData);
}
}
繼承匹配主要視圖關係,但是當涉及渲染partials /用戶控件時,我會將其視圖數據組合到頁面視圖數據中。
public class IndexViewData : MasterViewData
{
public string Name { get; set; }
public float Price { get; set; }
public SubViewData SubViewData { get; set; }
}
<% Html.RenderPartial("Sub", Model.SubViewData); %>
這僅是示例代碼,並不打算按原樣編譯。專爲ASP.Net MVC 1.0而設計。
這是Scott推薦的方法Gutherie,所以我不得不同意。 – 2009-09-21 21:34:18
@Simon Fox - 有一個鏈接到scottgu的推薦?找不到它。 – orip 2009-12-15 14:10:33
http://weblogs.asp.net/scottgu/archive/2007/12/06/asp-net-mvc-framework-part-3-passing-viewdata-from-controllers-to-views.aspx#5415732 – 2010-03-18 12:05:23
抽象控制器是一個好主意,我還沒有找到更好的方法。我很想看看其他人也做了什麼。
Request.Params對象是可變的。作爲請求處理週期的一部分,爲它添加標量值非常簡單。從視角來看,這些信息可能已經在QueryString或FORM POST中提供。 hth
我東西,另一種好辦法是可以爲查看一些屬性像一些接口的ParentView創建界面,讓您可以使用它無論對於其需要的參考控制頁面(父控件)以及應該從視圖訪問的主視圖。
我發現你傳遞給視圖的所有模型對象的共同父對象非常有用。
無論如何,頁面之間始終會存在一些常見的模型屬性。
編輯
Generic Error已經下面提供一個更好的答案。請閱讀它!
原來的答案
微軟實際上已經張貼在the "official" way一個條目來處理這個問題。這提供了一個循序漸進的解釋他們的推理。
總之,他們推薦使用抽象控制器類,但請親自看看。
其他解決方案缺乏優雅,花費時間太長。所以很明顯
<script runat="server" type="text/C#">
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
MasterModel = SiteMasterViewData.Get(this.Context);
}
protected SiteMasterViewData MasterModel;
</script>
我有SiteMasterViewData這種靜態get()方法返回SiteMasterViewData:我幾乎整整一年後這樣做很傷心,貧困的事情道歉。
我更喜歡將主視圖的數據驅動片斷分解成部分並使用Html.RenderAction。這個擁有廣受歡迎的視圖模型繼承方法幾個明顯的優勢:
- 母版視圖的數據是完全從「普通」視圖模型脫鉤。這是繼承的組合,並導致更容易更改的更鬆散耦合的系統。
- 主視圖模型由完全獨立的控制器動作構建。 「常規」操作不需要擔心這一點,也不需要一個視圖數據工廠,這對我的口味來說看起來過於複雜。
- 如果您碰巧使用像AutoMapper這樣的工具將您的域映射到您的視圖模型,您會發現配置起來更容易,因爲當它們不繼承主視圖數據時,視圖模型將更接近您的域模型。
- 使用獨立的主數據操作方法,您可以輕鬆地將輸出緩存應用於頁面的某些區域。通常情況下,主視圖包含的數據更改頻率比主頁面內容更少。
- 1. ASP.NET MVC:將項目傳遞到主頁
- 2. MVC 4主頁_layout傳遞數據
- 3. ASP.NET MVC主頁數據
- 4. ASP.NET MVC數據傳遞
- 5. 如何將數據從控制器傳遞到asp.net MVC中的主頁面?
- 6. 在頁面之間傳遞數據ASP.NET
- 7. 在asp.net頁面之間傳遞數據
- 8. 在頁面之間傳遞數據asp.net
- 9. ASP.net在頁面間傳遞數據
- 10. MVC:從模型的數據傳遞到CSHTML的ASP.NET MVC
- 11. ASP.NET MVC通過傳遞數據
- 12. Asp.net MVC 4 - 通過類傳遞數據
- 13. 傳遞angularjs數組到ASP.Net MVC方法
- 14. 在asp.net MVC從JavaScript將數據傳遞到操作方法
- 15. asp.net MVC 3傳遞參數
- 16. 將數據從ASp.NET MVC控制器傳遞到JavaScript函數
- 17. 在ASP.NET中傳遞數據
- 18. 在asp.net中傳遞值mvc
- 19. 傳遞在ASP.Net MVC的
- 20. ASP.NET MVC主頁面
- 21. ASP.NET - 將會話數據從頁面2傳遞到頁面1
- 22. ASP.NET:將數據從內容頁面傳遞到母版頁
- 23. 傳遞參數就像在Asp.net MVC
- 24. 傳遞JSON數據HTTPPost請求從Java到ASP.NET MVC
- 25. JSON數據沒有從JQuery傳遞到使用AJAX的ASP.Net MVC
- 26. ASP.NET MVC - 將分組數據傳遞到視圖
- 27. ASP.NET MVC:從視圖傳遞數據到控制器(Ajax vs jQuery)
- 28. ASP.Net MVC 5將數據傳遞到模態
- 29. ASP.NET MVC:將數據從操作過濾器傳遞到視圖
- 30. 如何將數據從asp.net MVC傳遞到Angular2
我寫了一篇關於如何管理的指南:http://www.britishdeveloper.co.uk/2010/06/mvc-pass-viewmasterpage-model.html應該有幫助 – BritishDeveloper 2011-06-21 20:38:20