0

同じモデルを共有する2つのコントローラーアクションがありました。同じビューでそれらを返すことはできますか?

理由は、1 つのビューに 2 つのカテゴリを表示する必要があるためです。1 つのカテゴリでロール内のすべてのユーザーを表示し、別のカテゴリでロール内ではないユーザーを表示します。

どうすればこれを行うことができるのだろうか?誰でも私を助けることができますか?

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")" />
}

トリッキーな部分は、メソッドの次のオーバーロードをFormExtensions.BeginForm()使用することです。

  public static MvcForm BeginForm(
      this HtmlHelper htmlHelper,
      string actionName,
      string controllerName
  )
于 2012-06-28T02:48:21.727 に答える
0

私があなたの質問を正しく理解していれば、1 つのビューに 2 つの異なるユーザー リストを表示する必要があります。特定の役割を持つユーザーのリストと、特定の役割を持たないユーザーの別のリストです。

の概念を使用して、これは完全に可能です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 に答える