0

私は MVC フレームワークと ASP.NET を初めて使用するので、ずさんなコードをお詫びします。

登録する新しいユーザーのロールを管理者が設定する必要があるアプリケーションを作成しています。管理者がアプリケーションにログインすると、アプリに登録したユーザーのリストを表示する管理者ページに自動的に移動します。管理者は、新しいユーザーの役割を選択できます。

管理者用のコントローラーは次のとおりです。

public class AdminTestController : Controller
{
    private UsersContext db = new UsersContext();

    // GET: /AdminTest/
    [Authorize(Roles = "Admin")]
    public ActionResult Index()
    {

        var model = db.UserProfiles.ToList();
        return View(model);
    }

    [HttpPost]
    public ActionResult Submit(string userName, string selectedRole)
    {
        Roles.AddUserToRole(userName,selectedRole);
        return View("Index");
    }

対応するビューは次のとおりです。

@model IEnumerable<WAP.Models.UserProfile>

@{
   ViewBag.Title = "Index";
}

...

@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.UserId)
    </td>
    <td>

    </td>
    <td>
        @Html.DisplayFor(modelItem => item.UserName)
    </td>
    <td>
        @Html.ActionLink("Edit", "Edit", new { id=item.UserId }) |
        @Html.ActionLink("Details", "Details", new { id=item.UserId }) |
        @Html.ActionLink("Delete", "Delete", new { id=item.UserId })

        @using (Html.BeginForm("Submit", "AdminTest", FormMethod.Post))
        {

            <select name ="selectedRole">
              <option value="Null"></option>
              <option value="Manager">Manager</option>
              <option value="Agent">Agent</option>
            </select>

            <input id="SubmitChange" type="submit" value="Submit" /> 
            <input id="userName" type ="text" value= "@item.UserName" name= "userName" hidden ="hidden" />
        }
    </td>
</tr>

}


この質問をご覧いただきありがとうございます。

4

2 に答える 2

1

これにはHtml.DropDownListヘルパーを使用できます。まず、コントローラーでロール コレクションを準備して、データを入力する必要があります。サンプルコードは次のとおりです。

[Authorize(Roles = "Admin")]
public ActionResult Index()
{
    var model = db.UserProfiles.ToList();
    var rolesCollection = new List<string> {"Null", "Manager", "Agent"};
    ViewBag.Roles = new SelectList(rolesCollection);
    return View(model);
}

次に、あなたの見解で:

@using (Html.BeginForm("Submit", "AdminTest", FormMethod.Post))
{
    @Html.Hidden("userName", item.UserName)
    @Html.DropDownList("selectedRole", (SelectList)ViewBag.Roles)

    <input id="SubmitChange" type="submit" value="Submit" /> 
}

このような方法でHtml.RadioButtonヘルパーを使用することもできます。

@using (Html.BeginForm("Submit", "AdminTest", FormMethod.Post))
{
    @Html.Hidden("userName", item.UserName)

    @Html.RadioButton("selectedRole", "Null", true)
    @Html.RadioButton("selectedRole", "Manager")
    @Html.RadioButton("selectedRole", "Agent")

    <input id="SubmitChange" type="submit" value="Submit" /> 
}

複数のロールを同時に選択したい場合は、jQuery.chosenHtml.ListBoxヘルパーなどの jQuery プラグインを使用することをお勧めします。

于 2013-10-07T08:08:58.183 に答える
0

すべての列挙型に EditorTemplates を使用します (「ロール」列挙型を作成します):

@model Enum 
@Html.DropDownListFor(m => Enum.GetValues(Model.GetType()).Cast<Enum>().Select(m => 
new SelecteListItem {Selected = "your logic", Text = "", Value = ""}))

または、現在の列挙型でカスタム部分ビューを使用します。

于 2013-10-07T11:14:31.857 に答える