2014-02-19 52 views
3

我使用WCF服务在控制器访问数据。如何从控制器传递详细型号查看

public ActionResult Index() 
     { 
      DataRerieveClient _proxy = new DataRerieveClient(); 
      var orderDetails = _proxy.GetProductDetails(null); 
      return View(); 
     } 

现在如何通过orderdetails从控制器可以查看和如何访问它们的视图。

编辑:

我有一个模型:

public class OrderDetails 
    { 
     public int OrderId { get; set; } 
     public int ProductId { get; set; } 
     public decimal UnitPrice { get; set; } 
     public int quanity { get; set; } 
     public decimal Discount { get; set; } 
    } 

_proxy.GetProductDetails(null)回报List<ServiceType.OrderDetails>

  1. 我需要一个局部模型在所有在这种情况下?
  2. 如何在我的视图中的表中显示列表值?

EDIT2:

public class AutoMapperConfig 
    { 
     public static void Configure() 
     { 
      Mapper.Map(ServiceOrders.OrderDetails, NorthWindMVCWCF.Models.OrderDetails); 
     } 
    } 

现在得到的错误

'NorthWindMVCWCF.ServiceOrders.OrderDetails' 是 '型',这是不是在给定的情况下 “有效NorthWindMVCWCF.Models.OrderDetails'为‘类型’,它是不是在给定上下文中有效

+0

我更新了我的答案。我想你可以从中得到一个好主意。 –

回答

2

我希望创建视图模型,如下我会做到这一点:

创建视图模型

public class OrderDetailViewModel 
{ 
    public int OrderId { get; set; } 
    public int ProductId { get; set; } 
    public decimal UnitPrice { get; set; } 
    public int Quanity { get; set; } 
    public decimal Discount { get; set; } 
} 

public class OrderDetailsViewModel 
{ 
    public OrderDetailsViewModel() 
    { 
     OrderDetails = new List<OrderDetailsViewModel>(); 
    } 

    public List<OrderDetailsViewModel> OrderDetails { get; set; } 
} 

手册投影

您可以创建一个OrderDetails视图模式和手动投影实例如下:

​​

AutoMapper替代投影

安装AutoMapper,请从包管理器控制台执行以下操作:

Install-Package AutoMapper 

在创建文件夹映射,类似如下:

public static class AutoMapperConfig 
{ 
    public static void Configure() 
    { 
    Mapper.CreateMap<OrderDetails, OrderDetailViewModel>(); 
    } 
} 

在您的全球ASAX调用配置方法:

protected void Application_Start() 
{ 
    ... 
    AutoMapperConfig.Configure(); 
    ... 
} 

然后在你的控制器映射:

var orderDetailsViewModel = new OrderDetailsViewModel(); 
orderDetailsViewModel.OrderDetails = Mapper.Map<List<OrderDetails>, List<OrderDetailsViewModel>>(orderDetails); 

我更喜欢使用AutoMapper方法,因为映射是全局定义的,可以在您的应用程序中重复使用。

回到您的视图模型

您的视图模型将被传递回如下:

 return View(orderDetailsViewModel); 

剃刀输出

可以通过添加一个模型访问它在您的观点参考在顶部:

@model OrderDetailsViewModel 

然后输出属性如下,我只包括OrderId,但你可以添加字段以同样的方式:

<table> 
<tr> 
<th>OrderId</th> 
</tr> 
@foreach(var orderDetail in Model.OrderDetails) 
{ 
    <tr> 
    <td>@orderDetail.OrderId</td> 
    </tr> 
} 
</table> 
+0

在编辑我的问题时做了一些澄清,你可以看看 – Simsons

+0

好的,更新了这个问题,以便更具体地为你服务。 :) – hutchonoid

+0

AutoMapper似乎intresting,我应该在哪个类中声明映射,scince那里FilterConfig.cs,RouteConfig.cs和WebApiConfig.cs – Simsons

1

你已经为此创建了ViewModel。

例如在模型文件夹中创建一个类:

public class MyViewModel // Whatever name you want to give 
{ 
    //My fields which I want to pass to View 
    publis string Field1{get;set;} 
    etc 
    etc 
} 

public ActionResult Index() 
{ 
     DataRerieveClient _proxy = new DataRerieveClient(); 
     var orderDetails = _proxy.GetProductDetails(null); 

     List<MyViewModel> viewModelList = new List<MyViewModel>(); 

     foreach(var orderDetail in orderDetails) 
     { 
      MyViewModel viewModel = new MyViewModel(); //Create an object of your ViewModel 
      viewModel.Field1 = orderDetails.Field1; //set all feilds like that  
      viewModelList.Add(viewModel); 
     } 
     return View(viewModelList); // Pass View Model to View 
} 

注意:您要创建信息查看您的视图模型

@model `List<MyViewModel>` 

然后使用这个视图模型来访问性能。

要了解更多关于什么是视图模型,请参考以下链接:

http://sampathloku.blogspot.ae/2012/10/how-to-use-viewmodel-with-aspnet-mvc.html

0
在控制类写

public ActionResult Index() 
{ 
    DataRerieveClient _proxy = new DataRerieveClient(); 
    var orderDetails = _proxy.GetProductDetails(null); 
    return View(orderDetails); 
} 

我假设你的项目名称是MvcApplication2,并且您的类名称位于模型文件夹中。因此请在View(样本)顶部添加以下代码。CSHTML):

@model MvcApplication2.Models.OrderDetail 

OK,你可以使用此代码来访问DataRecieveClient的属性:

<div class="display-label"> 
    @Html.DisplayNameFor(model => model.F1) 
</div> 
<div class="display-field"> 
    @Html.DisplayFor(model => model.F1) 
</div> 

对不起,我英文不好!

相关问题