【问题标题】:How to create a MVC model based on the data that i get from Database from a different assembly如何根据我从不同程序集的数据库中获取的数据创建 MVC 模型
【发布时间】:2014-10-15 16:30:00
【问题描述】:

我是 MVC 的新手。我正在创建一个 3 层应用程序 数据层(EF5) businessLayer(Linq to Entity)和 网络应用(MVC 4)

我创建了一个数据模型 (.edmx) 并使用 Entity framework 5 for oracle 11g

我将所需数据放入业务层的列表中。如下图

Public Class Customer_Provider
    Public Function getCustomers() As List(Of Customer)

        Dim list As New List(Of Customer)
        Using db As New Entities
            list = (From u In db.Customer Select u).ToList()
        End Using
        Return list
    End Function
End Class

在我的网络应用程序中,我添加所有引用并使用我的业务层将数据导入 MVC 控制器

Function Customer() As ActionResult    
        Dim obj As New Customer_Provider()
        Return View(obj.getCustomers())
    End Function

我的问题是如何创建一个模型来访问我从 obj.GetCustomer() 获得的数据以编写验证并将模型填充到视图中。我尝试了各种方法,但我无法做到。任何人都可以建议我一种方法。

我的视图页面

@ModelType IEnumerable(Of MVC_Temp.Customer)
@Code
    ViewData("Title") = "Customer"
    Layout = "~/Views/Shared/_Layout.vbhtml"
End Code

<h2>Customer</h2>
@For Each item In Model
    Dim currentItem = item
    @<tr>
        <td>
            @Html.DisplayFor(Function(modelItem) currentItem.CustomerID)
        </td>
        <td>
            @Html.DisplayFor(Function(modelItem) currentItem.CustomerName)
        </td>
<tr>
NEXT

【问题讨论】:

    标签: .net vb.net entity-framework asp.net-mvc-4


    【解决方案1】:

    使用视图所需的属性创建视图模型,您可以在其中添加必要的验证属性。如果您想让您的生活变得非常轻松,请使用 AutoMapper 来映射视图模型和模型,这样您就不需要手动设置视图模型属性。例如(c#):

    public class CustomerViewModel
    {
        public int ID {get;set;}
    
        [Required]
        public string Name {get;set;}
    }
    

    然后,使用您的视图模型作为您的视图模型。将视图模型类添加到您的 Web 应用程序项目中。

    编辑 你的控制器会做这样的事情:

    var viewModel = new List<CustomerViewModel>();
    var customers = obj.getCustomers();
    foreach(var customer in customers)
    {
     var customerViewModel = new CustomerViewModel();
     customerViewModel.ID = customer.ID;
     customerViewModel.Name = customer.Name;
     viewModel.Add(customerViewModel);
    }
    
     return View(viewModel);
    

    确保您的视图设置为期望您从控制器传递的 CustomerViewModel 类型。

    希望这是有道理的。

    【讨论】:

    • 感谢您的帮助。但是当我尝试这样做时,我得到了一个错误。传入字典的模型项的类型为“System.Collections.Generic.List1[DevLDB.Customer]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable1[MVC_Temp.Customer]”。
    • 将视图中的这一行@ModelType IEnumerable(Of MVC_Temp.Customer) 更改为@ModelType IEnumerable(Of DevLDB.Customer)。这是假设 DevLDB.Customer 是您的视图模型。
    • 在这种情况下它不引用MVC中的模型它直接从数据库中获取数据。我无法验证的地方。
    • 谢谢我错过了 AutoMapper 部分。它适用于 Automapper
    • 爱 AutoMapper。 :-) 很高兴我能帮上忙
    【解决方案2】:

    使用 AutoMapper 解决。我的控制器

            Dim UserList As New List(Of Customer)= val.getvalues()
            Mapper.CreateMap(Of DevLDB.Customer, MVC_temp.Customer)()
    
    
           Dim objModel As Customer= Mapper.Map(Of List(of DevLDB.Customer),  List(of  MVC_temp.Customer))(UserList)
    
    
    
            Return View(objModel )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-04
      • 2021-07-29
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多