C# 在C MVC应用程序中如何将复杂的linq结果从控制器传递到视图

C# 在C MVC应用程序中如何将复杂的linq结果从控制器传递到视图,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,开发了MVC应用程序和代码优先的方法,有三个不同的类 头等舱 需要linq结果,如: var _result = (from users in objDBMVCSamp.User join details in objDBMVCSamp.UserDetail on users.UserID equals details.UserID select new {

开发了MVC应用程序和代码优先的方法,有三个不同的类

头等舱 需要linq结果,如:

var _result = (from users in objDBMVCSamp.User
               join details in objDBMVCSamp.UserDetail 
               on users.UserID equals details.UserID
               select new
               {
                  users.UserName,
                  users.Password,
                  details.FirstName,...
               }).ToList();
还需要另一个结果,如:

  var _result = (from users in objDBMVCSamp.User
                   join details in objDBMVCSamp.UserDetail 
                   on users.UserID equals details.UserID
                   join address in objDBMVCSamp.UserAddress
                   on address.UserDetailsID equals details.UserDetailsID
                   select new
                   {
                      users.UserName,
                      details.FirstName,...
                      details.UserID,
                      address.Address,...
                   }).ToList();
需要在视图中显示这些结果。不创建类也可以通过其他方式显示

注:
上面的结果是动态的,所以我认为我们不能为这些结果创建一个静态类。对于这种情况,最好的方法是什么

如果要将值传递给view,我建议您根据要在view中显示的内容创建ViewModel

比如说,

视图模型

public class MyViewModel
{
   public var MyValue1{get;set;}
   public var MyValue2{get;set;}
   public var MyValue3{get;set;}
   ...
   ...
}
内部控制器

public ActionResult MyControllerMethod(someType MyType)
{
   // setViewmodels value here
}
var _result = (from users in objDBMVCSamp.User
  join details in objDBMVCSamp.UserDetail 
  on users.UserID equals details.UserID
  select new UserVM
  {
    UserName = users.UserName,
    Password = users.Password,
    FirstName = details.FirstName,
    LastName = details.LastName,
    EmailID = details.EmailID,
    UserID = details.UserID
  }).ToList();
return View(_result)
那么

@model MyViewModel

<h1>Model.MyValue1</h1> @*this will display value of MyValue1*@

定义表示要显示内容的视图模型

public class UserVM
{
  public string UserName { get; set; }
  public string Password { get; set; }
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public string EmailID{ get; set; }
  public int UserID { get; set; }
}
在控制器中

public ActionResult MyControllerMethod(someType MyType)
{
   // setViewmodels value here
}
var _result = (from users in objDBMVCSamp.User
  join details in objDBMVCSamp.UserDetail 
  on users.UserID equals details.UserID
  select new UserVM
  {
    UserName = users.UserName,
    Password = users.Password,
    FirstName = details.FirstName,
    LastName = details.LastName,
    EmailID = details.EmailID,
    UserID = details.UserID
  }).ToList();
return View(_result)
看法


这些是将数据从控制器传递到视图的方法

1您可以使用动态对象ViewBag将数据从控制器传递到视图

将以下内容添加到控制器:

     ViewBag.MyList = myList;
然后,您可以从视图中访问它:

     @ViewBag.MyList
   // e.g.@foreach (var item in ViewBag.MyList) { ... }
2使用ajax服务调用

  $.ajax(
    {
        type: "GET",
        url: "../Home/GetData",
        data: { function_param: values}
    });
3使用强类型类

   @model MyViewModel
  //e.g.@foreach (var item in MyViewModel) { ... }
有关更多信息,请参考此链接


创建包含要显示的特性的视图模型,然后使用。。。。选择新的MyViewModel{…并将视图模型传递给视图抱歉,我完全不理解您的评论谢谢您的回答。请检查我的问题我现在更新我的问题是为了不同的场景,不是为了这么多我想要更多的不同,在本例中我是这样做的。我不确定我是否理解您所说的。或者为视图模型添加其他属性地址、城市等,或者为您想要处理的每个场景创建一个新的视图模型谢谢您的回答。请检查我的问题现在我更新我的问题是为了不同的场景,不是为了这么多我想要更多的不同,在这种情况下我做什么。
  $.ajax(
    {
        type: "GET",
        url: "../Home/GetData",
        data: { function_param: values}
    });
   @model MyViewModel
  //e.g.@foreach (var item in MyViewModel) { ... }