部分视图中的SelectList

时间:2016-06-15 09:25:33

标签: c# asp.net-mvc partial-views html.dropdownlistfor selectlistitem

我是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">&times;</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的所有代码之前,一切正常。

请问有人带领吗?

0 个答案:

没有答案