我有两个控制器动作都共享相同的模型。我可以在同一个视图中返回它们吗?
原因是我需要在一个视图中显示 2 个类别。一个类别显示所有用户 IN 角色,另一个类别显示用户 NOT IN 角色。
想知道我该怎么做?谁能帮我?
我有两个控制器动作都共享相同的模型。我可以在同一个视图中返回它们吗?
原因是我需要在一个视图中显示 2 个类别。一个类别显示所有用户 IN 角色,另一个类别显示用户 NOT IN 角色。
想知道我该怎么做?谁能帮我?
当然是。对于控制器中的不同操作,您可以拥有相同的模型和视图。在这里,我将向您展示如何为创建和编辑操作创建 1 个视图。
1两种行动的模型:
public class CreateEditModel
{
public CreateEditViewMode Mode { get; set; }
public string AnOtherProperty { get; set; }
}
public enum CreateEditViewMode { Create, Edit }
的属性Mode
将CreateEditModel
帮助我们自定义每个动作的视图。
行动:
public ActionResult Create()
{
Models.CreateEditModel model = new Models.CreateEditModel();
model.Mode = Models.CreateEditViewMode.Create;
//Manipulate model
return View("CreateEdit", model);
}
[HttpPost]
public ActionResult Create(FormCollection collection)
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
public ActionResult Edit(int id)
{
Models.CreateEditModel model = new Models.CreateEditModel();
model.Mode = Models.CreateEditViewMode.Edit;
//Manipulate model
return View("CreateEdit", model);
}
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
// TODO: Add update logic here
return RedirectToAction("Index");
}
model.Mode
请注意我们如何在操作中分配[HttpGet]
: 1. 我们可以自定义视图。2.查看可以发回正确的[HttpPost]
动作。
两个动作的1 个视图:
@using MvcApplication1.Models
@model MvcApplication1.Models.CreateEditModel
@{
ViewBag.Title = @Model.Mode.ToString();
}
<h2>@Model.Mode.ToString()</h2>
@using (Html.BeginForm(Model.Mode.ToString(), "Home"))
{
<input type="submit"
value="@(Model.Mode == CreateEditViewMode.Create ? "Create" : "Update")" />
}
棘手的部分是使用Method的以下重载FormExtensions.BeginForm()
:
public static MvcForm BeginForm(
this HtmlHelper htmlHelper,
string actionName,
string controllerName
)
如果我正确理解了您的问题,您希望一个视图显示两个不同的用户列表:给定角色的用户列表和不属于给定角色的用户列表。
这是完全可能的——使用ViewModel
. 您创建一个具有视图所需的所有不同属性的类,并将其用作视图的模型。修改您的控制器操作以设置所有必要的属性
例如
视图模型
public class UserListViewModel
{
public string Role { get; set; }
public List<User> UsersInRole { get; set; }
public List<User> UsersNotInRole { get; set; }
}
控制器动作
public ActionResult ShowRoleDetails ( string role ) {
var model = new UserListViewModel();
model.Role = role;
model.UsersInRole = //some code to get users in the given role
model.UsersNotInRole = //some code to get users not in the given role
return View(model);
}
风景
@model ViewModel
...
<h1>Users in @Model.Role</h1>
@foreach (var user in Model.UsersInRole)
{
<p>@user.Name
}
<h1>Users not in @Model.Role</h1>
@foreach (var user in Model.UsersNotInRole)
{
<p>@user.Name
}