我是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);
}
问题是:当我运行应用程序时,我收到错误消息(已翻译)
具有UserRoleID键的ViewData元素是System.Int32类型 但应该输入IEnumerable&lt; SelectListItem&gt;。
索引无法显示。有关信息,在我添加userRoleID
的所有代码之前,一切正常。
请问有人带领吗?