当前位置: 首页 > 编程语言 > C#

ASP.NETMVC中的模型关系分享

时间:2023-04-10 23:19:23 C#

ASP.NETMVC中的模型关系我最近开始评估ASP.NETMVC。虽然为只有原始属性的模型创建控制器和视图既快速又简单(如官方页面的入门视频所示),但我没有找到任何使用复杂类型引用的好方法。假设我有这些模型:publicclassCustomer{publicintId{get;放;}公共字符串名称{得到;放;}publicAddress地址{get;放;}公共IList订单{得到;放;}}publicclassAddress{publicintId{get;放;}publicstring........}publicclassOrder{publicintId{get;放;}公共客户客户{得到;放;}publicstringOrderName{get;放;}.....}请注意,我在模型中没有外键(就像它通常用于LINQtoSQL,示例视频中也使用了外键),而是一个对象引用。我如何在asp.netmvc中处理这样的引用?有没有人有关于这个问题的一些好的提示或教程链接?可能包括复杂类型的自动绑定。我会将所有内容组合到我的视图模型中:CustomerViewModel.CustomerCustomerViewModel.AddressCustomerViewModel.Orders//也许是一个IEnumerableCustomerViewMode.CurrentOrder你应该能够使用一些输入助手绑定复杂的对象而不会遇到太多麻烦://..beginformm.Customer.Id)%>m.Customer.FirstName)%>m.Address.City)%>m.ActiveOrder.OrderName%>//..submit..//..endform..shouldbindbackifyour操作方法如下所示:[HttpPost]publicActionResultUpdateComplexObject(stringid,CustomerViewModelcustomerViewModel){//if(!id.Equals(customerViewModel.Customer.Id)throwsomething//只是我自己的约定之一,以确保我是处理正确的活动//实体-字符串id从路由规则绑定);返回RedirectToAction("DisplayComplexObject");//或者其他什么}Hal你可以使用数据传输对象来解决这个问题或者在你的实体中使用扩展方法–在EF中使用include方法-原始属性没有什么不同如果那不是你的意思,请纠正我,然后我会再次帮助你谢谢DTO:publicclassOrderDTO{publicintId{get;放;}publicintCustomerId{得到;放;}publicstringCustomerName{get;放;}}NHibernate存储库:publicIListGetOrders(){returnSession.Linq().Select(o=>newOrderDTO{Id=o.IdCustomerId=o.Customer.IdCustomerName=o.Customer.Name...}).ToList();视图:使用展开-包含-模型类型为“Order”:使用DTO-模型类型为“OrderDTO”:编辑:好的,首先你可能想使用FormViewModel进行创建/编辑操作。像这样;控制器:publicActionResultEdit(intid){Orderorder=null;//OrderService.Get(id);IList客户=空;//CustomerService.GetAll();OrderFormViewModel模型=OrderFormViewModel.Create(order);model.Customers=customers.Select(c=>newSelectListItem{Value=c.Id,Text=c.Name});返回视图(模型);}[HttpPost]publicActionResultEdit(intcustomerId,Orderorder){//customerId-从下拉列表中选择。}publicclassOrderFormViewModel{publicstaticOrderFormViewModelCreate(Orderorder){returnnewOrderFormViewModel{Order=order};}publicOrderOrder{get;内部设置;}publicIEnumerableCustomers{get;内部设置;}publicintCustomerId{得到;内部设置;}}view:o.CustomerId,Model.Customers)%>我更喜欢让我的视图尽可能“愚蠢”,所以我喜欢为绑定创建自定义视图模型。在控制器中,您可以将丰富的域对象映射到视图模型的扁平模型。例如:publicclassChooseCustomerModel{publicOrderOrder{get;放;}//将Customer对象投射到这个容器中,这很容易绑定到publicIDictionaryPotentialCustomers{get;放;如果您正在寻找关于这个主题的好资料,我推荐ASP.NETMVC视图模型模式。以上就是《C#学习教程:ASP.NETMVC中模型关系分享》的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。涉及侵权,请点击维权联系管理员删除。如需转载请注明出处: