У меня есть список пользователей, как мне изменить его на выпадающий (используя Razor в MVC)? - PullRequest
1 голос
/ 22 февраля 2012

Я получаю список моих пользователей, используя следующий код:

Вот мой взгляд:

@model System.Web.Security.MembershipUserCollection

@{
    ViewBag.Title = "ManageProfile";
}
<div class ="hero-unit">
<h2>ManageProfile</h2>

<ul>
       @foreach (MembershipUser user in Model)
       {<li>@user.UserName</li>}

</ul>
</div>

Вот мой контроллер:

    public ActionResult ManageProfile()
    {
        var users = Membership.GetAllUsers();
        return View(users);
    }

Я бы предпочел, чтобы я мог выбрать пользователя из выпадающего списка.Как мне изменить мой код, чтобы получить выпадающий список?(моя цель - иметь возможность выбрать пользователя из выпадающего списка и изменить детали профиля этого пользователя)

Ответы [ 3 ]

1 голос
/ 22 февраля 2012

Как всегда в приложении ASP.NET MVC, вы могли бы начать с разработки модели представления, которая будет отвечать требованиям вашего представления (которое из того, что вы описали в своем вопросе, отображает выпадающий список со всеми пользователями):

public class MyViewModel
{
    [Display(Name = "select user")]
    public string SelectedUser { get; set; }
    public IEnumerable<SelectListItem> Users { get; set; }
}

затем вы пишете контроллер, который будет запрашивать ваши репозитории и создавать модель представления, которая будет передаваться в представление:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var users = Membership.GetAllUsers();
        var model = new MyViewModel
        {
            Users = users.OfType<MembershipUser>().Select(x => new SelectListItem
            {
                Value = x.UserName,
                Text = x.UserName
            })
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(string selectedUser)
    {
        return Content("Thank you for selecting " + selectedUser);
    }
}

и, наконец, вы пишете соответствующий вид:

@model MyViewModel
@using (Html.BeginForm())
{
    @Html.LabelFor(x => x.SelectedUser)
    @Html.DropDownListFor(x => x.SelectedUser, Model.Users)
    <button type="submit">OK</button>
}
0 голосов
/ 22 февраля 2012

Метод действия :

public ActionResult ManageProfile()
{
    List<SelectListItem> userNames = new List<SelectListItem>();
    var users = Membership.GetAllUsers();

    foreach (MembershipUser user in users)
        userNames.Add(new SelectListItem() { Text = user.UserName, Value = user.UserName);

    return View(userNames);
}

Просмотр :

@model List<SelectListItem>

@{
    ViewBag.Title = "ManageProfile";
}
<div class ="hero-unit">
<h2>ManageProfile</h2>

@Html.DropDownList("SelectedUser", Model)

</div>

Это простой, не масштабируемый способ, который демонстрирует идеюкак использовать DropDownList() (вы также можете использовать DropDownListFor()).Но я бы порекомендовал создать своего рода ViewModel для включения этих данных, и тогда вы бы использовали строго типизированный View с ViewModel в качестве @model.

0 голосов
/ 22 февраля 2012

Вы можете посмотреть мой ответ в следующем посте

привязка данных к выпадающему списку частичного просмотра в MVC3 с использованием viewbag

Я привел пример того, как использовать IEnumerable в качестве свойства модели и назначать значения в контроллере и использовать в представлении. (Представление использует движок представления Aspx), для Razor попробуйте следующее

@Html.DropDownListFor(m=>m.SelectedCountry,Model.countriesList)
@Html.DropDownListFor(m=>m.SelectedState,Model.stateList)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...