我有两个控制器动作都共享相同的模型。我可以在同一个视图中返回它们吗?
原因是我需要在一个视图中显示2个类别。一个类别显示所有用户的IN角色,另一个类别显示用户NOT IN角色。
想知道我该怎么做?任何人都可以帮助我吗?
答案 0 :(得分:0)
肯定是的。您可以为控制器中的不同操作设置相同的模型和视图。在这里,我将向您展示如何为创建和编辑操作创建一个视图。
两个操作的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")" />
}
棘手的部分是使用以下overload of FormExtensions.BeginForm()
Method:
public static MvcForm BeginForm(
this HtmlHelper htmlHelper,
string actionName,
string controllerName
)
答案 1 :(得分:0)
如果我已正确理解您的问题,您希望一个视图显示两个不同的用户列表:给定角色的用户列表,以及另一个不属于给定角色的用户列表。
这完全有可能 - 使用ViewModel
的概念。您创建一个包含视图所需的所有不同属性的类,并将其用作视图的模型。修改您的控制器操作以设置所有必要的属性
e.g。
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
}