gpt4 book ai didi

c# - 如何使用数据库查询在 ASP.NET MVC 5 中创建复杂的 EditorTemplate?

转载 作者:行者123 更新时间:2023-11-30 12:40:47 25 4
gpt4 key购买 nike

我想创建一个更复杂的 EditorTemplate 来从列表中选择一个客户。

我知道 DropDownListFor,但我想向客户展示卡片图片和一些数据不仅仅是一个普通的 select 列表。

我想做什么:

创建一个 EditorTemplate 供客户选择,例如......在任何 POCO 类中

public class X{

[Key] int Id {get;set;}

[UIHint("CustomerSelector")] int Custumer_Id {get;set;}

}

CustomerSelector”编辑器模板能够查询所有客户并将他们显示到丰富列表中。

Customer List

问题是什么:

  • 从 View 内部添加查询逻辑不是一个好主意。这违反了 MVC 模式。
  • 在每个 Controller 中查询客户列表并将其作为参数传递给 EditorTemplate 并不是很模块化。

我怎样才能创建这个 EditorTemplate 而不会弄乱 MVC 模式,也不会在每个 Controller 中重复代码?

最佳答案

不幸的是,没有真正好的方法来处理这样的事情。您是正确的,在 View 中进行数据库访问是不正确的。这不仅违反了 MVC,而且还需要在 View 中创建一个额外的上下文实例,而实际上每个请求应该只有一个。

正如您所提到的,另一种方法是在 Controller 中执行查询,然后将其传递到您的 View 中。老实说,这可能是你最好的坏选择。

我看到的另一种选择是使用子 Action 。子操作允许您将查询用户和传递给 View 的逻辑限制在一个地方。缺点是您必须手动处理字段命名,因为子操作 View 的呈现将超出您正在构建的表单的范围。换句话说,您必须执行以下操作:

@Html.Action("CustomerSelect", new { fieldName = "Customer_Id" })

这也不是很理想,因为现在您已经有了一个必须跟踪的字符串,而且您必须小心谨慎地提供正确的名称。例如,如果这是一个项目集合,那么您实际上需要传递类似 "MyCollection["+ i.ToString() + "].Customer_Id" 的内容。你可以看到这很快就开始变得困惑了。仅出于这个原因,我几乎不会将其作为可能的解决方案。

最后一个选项是使用 HtmlHelper 扩展。这与编辑器模板存在相同的问题,因为您将不得不新建一个上下文实例,但至少在不在 Razor View 内完成方面更好。

关于c# - 如何使用数据库查询在 ASP.NET MVC 5 中创建复杂的 EditorTemplate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40677848/

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