我知道这类问题有很多答案,我已经阅读了所有这些问题但仍无法解决这个问题。
我有一个下拉列表,我使用SelectList填充控制器并使用viewbag进行传输。我在下面简化了它,只有0,1& 2,Text&的值相同值。
我真的想要'无','每周'和'每月'的文字,并且尝试了视图模型值1和每周,但都没有显示。
viewmodel当前正在传递初始值1(我已尝试传递string和int值,并且还检查它是使用EditorFor而不是DropDownFor传递1),但是下拉列表显示第一个值0,而不是模型值。
我已在其他地方工作,但SelectList是从db表填充的,如下所示。在这种情况下,模型传递ID值,并显示飞机的正确初始值。
var nAir = (from n in db.Handicaps
orderby n.Aircraft
where n.ClubsID == ClubsID
select n).ToList();
ViewBag.Aircraft = new SelectList(nAir, "ID", "Aircraft");
但是当我手动填充列表时,模型值将被忽略。
我显然错过了一些东西,但无法解决它的问题。我可以为EmailFreq设置一个表,就像上面的例子一样,但下拉列表中只有3个值,所以看起来有点过分。
控制器:
ViewBag.EmailFreq = new SelectList(new List<SelectListItem>
{
new SelectListItem { Value = "0", Text = "0"},
new SelectListItem { Value = "1", Text = "1" },
new SelectListItem { Value = "2", Text = "2" }
}, "Value", "Text");
var profile = new ClubProfileEdit
{
ClubID = ClubsID,
ClubName = Session["ClubName"].ToString(),
EmailFreq = existProfile.EmailFreq.ToString()
};
return View(profile);
观点:
<div class="form-group">
@Html.LabelFor(model => model.EmailFreq, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.EmailFreq, new SelectList(ViewBag.EmailFreq, "Value", "Text"), new { @class = "form-control" } )
@Html.ValidationMessageFor(model => model.EmailFreq, "", new { @class = "text-danger" })
</div>
</div>
Viewmodel:
namespace OAcontest.ViewModels
{
public class ClubProfileEdit
{
public int ID { get; set; }
public int ClubID { get; set; }
public string ClubName { get; set; }
public string EmailFreq { get; set; }
}
}