gpt4 book ai didi

c# - ASP.NET MVC 中的模型关系

转载 作者:太空狗 更新时间:2023-10-30 01:11:17 27 4
gpt4 key购买 nike

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

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 来说很典型,示例视频中也使用了外键),而是一个对象引用。

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

最佳答案

您可以针对此问题使用数据传输对象,或者您可以在实体上使用扩展方法 - 在 EF 中包含方法 -

原始属性没有什么不同。如果那不是你的意思,请纠正我然后我会再次帮助你

谢谢

DTO:

public class OrderDTO
{
public int Id { get; set; }
public int CustomerId { get; set; }
public string CustomerName { get; set; }
}

NHibernate 存储库:

public IList<OrderDTO> GetOrders()
{
return Session.Linq<Order>()
.Select(o => new OrderDTO {
Id = o.Id
CustomerId = o.Customer.Id
CustomerName = o.Customer.Name
...
}).ToList();
}

查看:

使用 Expand - Include - 模型类型为“Order”:

<%= Model.Customer.Name %>

使用 DTO - 模型类型为“OrderDTO”:

<%= Model.CustomerName %>

编辑:

好的,首先您可能想使用 FormViewModel 来创建/编辑操作。像这样;

Controller :

public ActionResult Edit(int id)
{
Order order = null; // OrderService.Get(id);
IList<Customer> customers = null; // CustomerService.GetAll();

OrderFormViewModel model = OrderFormViewModel.Create(order);
model.Customers = customers.Select(c => new SelectListItem {
Value = c.Id,
Text = c.Name
});

return View(model);
}

[HttpPost]
public ActionResult Edit(int customerId, Order order)
{
//customerId - selected from dropdown.
}

public class OrderFormViewModel
{
public static OrderFormViewModel Create(Order order)
{
return new OrderFormViewModel {
Order = order
};
}

public Order Order { get; internal set; }
public IEnumerable<SelectListItem> Customers { get; internal set; }
public int CustomerId { get; internal set; }
}

查看:

<%= Html.DropDownListFor(o => o.CustomerId, Model.Customers) %>

关于c# - ASP.NET MVC 中的模型关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2911844/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com