SelectList в частичном представлении
Я новичок в ASP.NET MVC, и я пытаюсь получить раскрывающийся список в частичном представлении для работы. Я выполнил поиск по этому веб-сайту и другим, но не нашел подходящего ответа для своего приложения. Я думаю, что лучший способ объяснить мою проблему - показать вам мой код.
Заранее извиняюсь за английские ошибки, это не мой родной язык.
Вот ViewModel для создания пользователя:
namespace AppliSuiviPV.ViewModels
{
public class CreateUserAppliViewModel
{
[Display(Name = "Numéro d'utilisateur")]
[Key]
public int UserAppliID { get; set; }
[Display(Name = "Nom")]
[Required(ErrorMessage = "Le nom est requis")]
public string UserAppliNom { get; set; }
// some other attributes ...
// clé étrangère
[Display(Name = "Rôle")]
[Required(ErrorMessage = "Le rôle est requis")]
public int UserRoleID { get; set; }
public IEnumerable<SelectListItem> UserRoles { get; set; }
}
}
У меня есть два частичных представления в моем индексе: список и модальный для создания.
Индекс (здесь я просто удаляю Javascript):
@model List<AppliSuiviPV.ViewModels.ListeUtilisateursViewModel>
@{
ViewBag.Title = "Liste des utilisateurs";
Layout = "~/Views/Shared/_Layout.cshtml"; // layout avec le menu
}
<!-- La modale -->
<div class="modal fade" id="CreateUserAppliModal" tabindex="-1" role="dialog" aria-labelledby="CreateUserAppliModalLabel">
<div class="modal-dialog modalCreateUserAppli" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h3><strong>Nouvel utilisateur</strong></h3>
</div>
<div class="modal-body" id="form-container">
@Html.Partial("_CreateUserAppli", new AppliSuiviPV.ViewModels.CreateUserAppliViewModel())
</div>
</div>
</div>
</div>
<div id="userAppliList">
@Html.Partial("_UserAppliList", Model)
</div>
Вот частичное представление, в котором я хочу раскрывающийся список (для UserRoleID):
@model AppliSuiviPV.ViewModels.CreateUserAppliViewModel
@using (Html.BeginForm("CreateUserAppli", "UserAppli", FormMethod.Post, new { id = "form-createuser" }))
{
@Html.AntiForgeryToken()
<div id="result"></div>
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.UserAppliNom, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserAppliNom, new { htmlAttributes = new { @class = "form-control", id = "nomUser" } })
@Html.ValidationMessageFor(model => model.UserAppliNom, "", new { @class = "text-danger" })
</div>
</div>
<!-- ... -->
<div class="form-group">
@Html.LabelFor(model => model.UserRoleID, "Rôle", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(x => x.UserRoleID, Model.UserRoles, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.ValidationMessageFor(model => model.UserRoleID, "", new { @class = "text-danger" })
</div>
</div>
<!-- Au moins un champ non renseigné -->
<div id="missingData">
<div class="alert alert-danger"> <strong>Tous les champs sont obligatoires</strong></div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<button type="button" id="createuser-reset" class="btn btn-default" data-dismiss="modal">Annuler</button>
<button type="submit" id="createuser-submit" name="createuser-submit" class="btn btn-primary" style="margin-left:5px;">Valider</button>
</div>
</div>
</div>
}
И, наконец, действие контроллера для отображения частичного представления:
// Création Utilisateur par la modale
// GET
public ActionResult CreateUserAppli()
{
// population de la liste des rôles
var lesRoles = (from s in db.UserRoles select s).ToList();
// création de l'objet User qui contiendra la liste des rôles
CreateUserAppliViewModel userAppli = new CreateUserAppliViewModel
{
UserRoles = lesRoles.Select(x => new SelectListItem
{
Value = x.UserRoleID.ToString(),
Text = x.UserRoleLibelle
})
};
return PartialView("_CreateUserAppli", userAppli);
}
Проблема: когда я запускаю приложение, я получаю сообщение об ошибке (переведено)
Элемент ViewData с ключом UserRoleID имеет тип System.Int32, но должен иметь тип IEnumerable
.
И индекс не отображается. Для информации, все хорошо работало, прежде чем я добавлю весь код для userRoleID
,
Кто-нибудь может иметь лидерство, пожалуйста?