ASP.NET MVC下拉列表从SelectList中未选择模型的初始值

时间:2017-05-16 12:53:02

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

我知道这类问题有很多答案,我已经阅读了所有这些问题但仍无法解决这个问题。

我有一个下拉列表,我使用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; }
}
}

0 个答案:

没有答案