同じモデルを共有する2つのコントローラーアクションがありました。同じビューでそれらを返すことはできますか?
理由は、1 つのビューに 2 つのカテゴリを表示する必要があるためです。1 つのカテゴリでロール内のすべてのユーザーを表示し、別のカテゴリでロール内ではないユーザーを表示します。
どうすればこれを行うことができるのだろうか?誰でも私を助けることができますか?
同じモデルを共有する2つのコントローラーアクションがありました。同じビューでそれらを返すことはできますか?
理由は、1 つのビューに 2 つのカテゴリを表示する必要があるためです。1 つのカテゴリでロール内のすべてのユーザーを表示し、別のカテゴリでロール内ではないユーザーを表示します。
どうすればこれを行うことができるのだろうか?誰でも私を助けることができますか?
はい、間違いなく。コントローラ内の異なるアクションに対して同じモデルとビューを持つことができます。ここでは、作成アクションと編集アクションに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")" />
}
トリッキーな部分は、メソッドの次のオーバーロードをFormExtensions.BeginForm()
使用することです。
public static MvcForm BeginForm(
this HtmlHelper htmlHelper,
string actionName,
string controllerName
)
私があなたの質問を正しく理解していれば、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
}