使用ASP.NET MVC从列表创建下拉字段表单

时间:2019-07-16 15:44:57

标签: c# asp.net asp.net-mvc

下一次,由于我正在学习C#ASP.NET MVC,所以我可以创建一些帖子。我来自Pythonic世界,所以有些事情对我来说还不清楚。

我想生成一个字符串列表,然后我要在表单中以DropDownList形式显示此列表。

这是我的模特

public class Joueur
    {
        public int ID { get; set; }

        [Required, Display(Name = "Nom"), StringLength(30)]
        public string Lastname { get; set; }

        [Required, Display(Name = "Prénom"), StringLength(30)]
        public string Firstname { get; set; }

        [Required, StringLength(15)]
        public string Poste { get; set; }

        public string Image { get; set; }
    }

根据创建方法,这是我的控制器:

// GET: Joueurs/Create
public ActionResult Create()
        {
            List<Strings> posteList = new List<SelectListItem>{ "Gardien", "Défenseur", "Milieu", "Attaquant" };
            ViewBag.PosteList = posteList;
            return View();
        }

这是我的观点:

<div class="col-md-10">
    @*ViewBag.PosteList is holding all the postes values*@
    @Html.DropDownListFor(model => model.Poste, ViewBag.PosteList as SelectList, new { @class = "form-control" })
    @Html.ValidationMessageFor(model => model.Poste, "", new { @class = "text-danger" })
</div>

但是我遇到了这个问题:

  

@ Html.DropDownListFor(model => model.Poste,ViewBag.PosteList为   SelectList,新的{@class =“ form-control”})   没有类型为«IEnumerable的ViewData元素   »键“ Poste”。

我该怎么做?

使用Django,这非常简单,在我的模型中,我创建了一个字典,并在属性中传递了该字典,但是使用C#ASP.NET?我找不到解决办法。

2 个答案:

答案 0 :(得分:0)

我假设您的视图将显示一个表格来表示您希望用户填写的Joueur对象,并且您的ViewBag.PosteList将具有用户可以为{{ 1}}属性。为此,您应该在Joueur.Poste控制器方法中创建一个新的/空的Joueur对象,并将其传递给视图,如下所示:

Create

然后其余的原始代码应该可以使用。

答案 1 :(得分:0)

我找到了解决方案,希望这是个好方法:

在我的模型中,我创建了一个Enum

public class Joueur
    {
        public int ID { get; set; }

        [Required, Display(Name = "Nom"), StringLength(30)]
        public string Lastname { get; set; }

        [Required, Display(Name = "Prénom"), StringLength(30)]
        public string Firstname { get; set; }

        [Required, StringLength(15)]
        public Position Poste { get; set; }

        public string Image { get; set; }
    }

    public enum Position
    {
        Gardien,
        Défenseur,
        Milieu,
        Attaquant
    }

在我看来,我添加了:

<div class="form-group">
    @Html.LabelFor(model => model.Poste, htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.DropDownListFor(m => m.Poste, new SelectList(Enum.GetValues(typeof(FCSL.Models.Joueur.Position))), "Sélectionner le poste", new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Poste, "", new { @class = "text-danger" })
    </div>
</div>

然后我应用了迁移命令。看来现在可以正常工作。