什么是你的方式传递数据到主页(使用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. ASP.NET MVC主页数据
- 3. ASP.NET MVC数据传递
- 4. ASP.net在页面间传递数据
- 5. 在asp.net页面之间传递数据
- 6. ASP.NET MVC通过传递数据
- 7. 在asp.net MVC从JavaScript将数据传递到操作方法
- 8. 在ASP.NET中传递数据
- 9. 在asp.net中传递值mvc
- 10. 传递在ASP.Net MVC的
- 11. ASP.NET MVC主页面
- 12. 传递参数就像在Asp.net MVC
- 13. 从页面到页面传递数据
- 14. 如何将数据从asp.net MVC传递到Angular2
- 15. asp.net mvc关系数据没有传递到视图
- 16. ASP.NET MVC:从视图传递数据到控制器(Ajax vs jQuery)
- 17. ASP.NET MVC如何将加入的数据传递到视图中?
- 18. 如何从javascript数据传递到C#(asp.net MVC)
- 19. JSON数据没有从JQuery传递到使用AJAX的ASP.Net MVC
- 20. 传递JSON数据HTTPPost请求从Java到ASP.NET MVC
- 21. ASP.NET MVC - 将分组数据传递到视图
- 22. 在主页面和内容页面之间传递数据
- 23. 传递数据库结果到PHP-MVC
- 24. MVC&从Controller ActionResult传递数据到页面的JavaScript
- 25. MVC主页动态数据
- 26. 将数据从主窗口传递到页面
- 27. ASP.NET MVC ajax - 数据传输
- 28. 与JSON传递数据到ASP.Net webservice
- 29. 传递字典到控制器asp.net mvc
- 30. 从JavaScript传递JSON对象到ASP.NET MVC
我写了一篇关于如何管理的指南:http://www.britishdeveloper.co.uk/2010/06/mvc-pass-viewmasterpage-model.html应该有帮助 – BritishDeveloper 2011-06-21 20:38:20