在 ASP.Net MVC 的视图中使用 2 个表(使用不同的模型返回 2 个 LINQ?)
Posted
技术标签:
【中文标题】在 ASP.Net MVC 的视图中使用 2 个表(使用不同的模型返回 2 个 LINQ?)【英文标题】:Using 2 tables in a View in ASP.Net MVC (Returning 2 LINQ using different models?) 【发布时间】:2016-09-16 02:56:00 【问题描述】:我有一个View
需要显示,例如,一个User
和一个Role
表。我需要创建 2 个要在视图中返回的 LINQ
查询,一个用于 User
,另一个用于 Role
,以便我可以在视图中显示 2 个表。到目前为止,我只能返回User
,但我如何返回Role
?这是我当前的设置:
用户模型
-ViewModel
用于 View 的文本框,Model
用于表中记录的循环
public class UserModel
public int user_id get; set;
public string user_name get; set;
...
用户视图模型
public class UserViewModel
public IPagedList<CDS.Models.UserModel> Users set; get;
public int userId get; set;
public string userName get; set;
...
查看
@model CDS.Models.UserViewModel
@using PagedList.Mvc;
@using (html.BeginForm("Create", "User", FormMethod.Get))
@Html.HiddenFor(m => m.userId)
@Html.LabelFor(m => m.userName)
@Html.TextBoxFor(m => m.userName)
<table id="dbTable">
<thead>
<tr>
<th class="hidden">
@Html.DisplayNameFor(model => model.user_id)
</th>
<th>
@Html.ActionLink("User", "Create", new sortOrder = ViewBag.UserSort, currentFilter = ViewBag.CurrentFilter )
</th>
</tr>
</thead>
<tbody id="dbBody">
@foreach (var item in Model.Users)
<tr>
<td class="hidden">
@Html.DisplayFor(modelItem => item.user_id)
</td>
<td>
@Html.DisplayFor(modelItem => item.user_name)
</td>
</tr>
</tbody>
</table>
//Don't mind this code, it's only for the pagination
Page @(Model.Users.PageCount < Model.Users.PageNumber ? 0 : Model.Users.PageNumber) of @Model.Users.PageCount
@Html.PagedListPager(Model.Users, page => Url.Action("Create",
new page, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter ))
UserController - 我如何为角色返回一个 ViewModel
和另一个 LINQ
?
DBEntities _odb = new DBEntities();
public ActionResult Create(string sortOrder, string currentFilter, string searchString, int? page)
var user = from u in _odb.USR_MSTR
select new UserModel
user_id = u.USR_ID,
user_name = u.USR_NAME,
;
int pageSize = 10;
int pageNumber = (page ?? 1);
var vm = new UserViewModel();
vm.Users = user.ToPagedList(pageNumber, pageSize);
return View(vm);
【问题讨论】:
您开始说要显示Role
表,但随后您询问是否返回Region
?
我使用PartialView
来显示记录,我只是没有在此处包含它以避免长时间发布。我正在考虑为每个表使用 2 PartialView
,但不知道如何返回 2 ViewModels
与不同的 LINQ
@StephenMuecke 哦,开枪!实际上这是我当前项目中的另一个表,我只是在我的帖子中使用了一个示例表。我马上修改,谢谢!
但是Role
对用户有一个 FK,所以您肯定想显示每个用户的角色,而不是单独的角色列表吗?
哦,对不起。看来我不应该这么说以避免混淆。我只会删除它。假设我希望User
和Role
显示在同一个View
中。
【参考方案1】:
您可以考虑两种选择。
在你的视图模型中为Role
的集合添加一个额外的属性
public IEnumerable<Role> Roles get; set;
在 GET 方法中
var roles = db.Roles..... // your query
var vm = new UserViewModel()
Roles = roles,
Users = user.ToPagedList(pageNumber, pageSize)
;
return View(vm);
或者创建一个返回角色部分视图的 ChildActionOnly 方法
[ChildActionOnly]
public ActionResult FetchRoles()
var model = ... // your query
return PartialView(model);
在FetchRoles.cshtml
@model IEnumerable<Role>
... // html to display roles
然后在主视图中,使用渲染它
@ Html.RenderAction("FetchRoles", "yourControllerName");
【讨论】:
我做了第一个,因为它比第二个对我来说更熟悉,它成功了!谢啦! :) 如果您想在其他页面中重用角色的部分视图,第二个会更合适。以上是关于在 ASP.Net MVC 的视图中使用 2 个表(使用不同的模型返回 2 个 LINQ?)的主要内容,如果未能解决你的问题,请参考以下文章