ASP.NET MVC 中的模型关系 [英] Model relationships in ASP.NET MVC

查看:19
本文介绍了ASP.NET MVC 中的模型关系的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最近开始评估 ASP.NET MVC.虽然为仅具有原始属性的模型创建控制器和视图非常简单快捷(如官方页面的入门视频中所示),但我没有找到任何处理复杂类型引用的好方法.假设我有这些模型:

I recently started evaluating ASP.NET MVC. While it is really easy and quick to create Controllers and Views for Models with only primitive properties (like shown in the starter videos from the official page) I didn't find any good way to work with references to complex types. Let's say, I have these Models:

public class Customer {  
    public int Id { get; set; }  
    public string Name { get; set; }  
    public Address Address { get; set; }  
    public IList<Order> Orders { get; set; }  
}

public class Address {  
    public int Id { get; set; }  
    public string .....  
    .....  
}

public class Order {  
    public int Id { get; set; }  
    public Customer Customer { get; set; }  
    public string OrderName { get; set; }  
    .....  
}

请注意,我在模型中没有外键(就像 LINQ to SQL 的典型特征,示例视频中也使用了外键),而是对象引用.

Note that I don't have foreign keys in the models (like it's typical for LINQ to SQL, which is also used in the sample video) but an object reference.

如何在 asp.net mvc 中处理此类引用?有人有关于这个问题的一些好的提示或教程链接吗?可能包括与复杂类型的自动绑定.

How can I handle such references in asp.net mvc? Does someone has some good tips or links to tutorials about this problem? maybe including autobinding with complex types.

推荐答案

我会将所有内容合并到我的视图模型中:

I would combine everything into my view model:

CustomerViewModel.Customer
CustomerViewModel.Address
CustomerViewModel.Orders // maybe an IEnumerable<Order>
CustomerViewMode.CurrentOrder

您应该能够使用一些输入帮助程序轻松绑定复杂对象:

You should be able to bind your complex objects without too much trouble using some of the input helpers:

//.. begin form
<%=Html.HiddenFor(m=>m.Customer.Id)%>
<%=Html.TextboxFor(m=>m.Customer.FirstName)%>
<%=Html.TextBoxFor(m=>m.Address.City)%>
<%=Html.TextBoxFor(m=>m.ActiveOrder.OrderName%>
//.. submit ..
//.. end form ..

如果您的操作方法如下所示,则应该绑定回正常:

The should bind back ok if your action method looks like:

[HttpPost]
public ActionResult UpdateComplexObject(string id, CustomerViewModel customerViewModel) {
// if (!id.Equals(customerViewModel.Customer.Id) throw something
// just one of my own conventions to ensure that I am working on the correct active
// entity - string id is bound from the route rules.
ValidateModel(customerViewModel);
service.UpdateCustomer(customerViewModel.Customer);
serviceOrder.UpdateOrder(customerViewModel.ActiveOrder);
serviceAddress.UpdateAddress(customerViewModel.Address);
return RedirectToAction("DisplayComplexObject"); // or whatever
}

哈尔

这篇关于ASP.NET MVC 中的模型关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆