下一次,由于我正在学习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?我找不到解决办法。
答案 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>
然后我应用了迁移命令。看来现在可以正常工作。