C# 在C MVC应用程序中如何将复杂的linq结果从控制器传递到视图
开发了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 {
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) { ... }