0

我有两个控制器动作都共享相同的模型。我可以在同一个视图中返回它们吗?

原因是我需要在一个视图中显示 2 个类别。一个类别显示所有用户 IN 角色,另一个类别显示用户 NOT IN 角色。

想知道我该怎么做?谁能帮我?

4

2 回答 2

0

当然是。对于控制器中的不同操作,您可以拥有相同的模型和视图。在这里,我将向您展示如何为创建编辑操作创建 1 个视图。

1两种行动的模型

public class CreateEditModel
{
    public CreateEditViewMode Mode { get; set; }
    public string AnOtherProperty { get; set; }
}

public enum CreateEditViewMode { Create, Edit }

的属性ModeCreateEditModel帮助我们自定义每个动作的视图。

行动:

    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
  )
于 2012-06-28T02:48:21.727 回答
0

如果我正确理解了您的问题,您希望一个视图显示两个不同的用户列表:给定角色的用户列表和不属于给定角色的用户列表。

这是完全可能的——使用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
}
于 2012-06-28T03:48:48.373 回答