MVC下拉列表没有获得控制器中的值

时间:2015-03-14 22:25:52

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

我使用剃刀填充模型列表创建下拉列表,然后将此列表传递给视图以填充下拉列表。下拉列表是正确创建的,但是当我将值发布到控制器的创建操作时,我没有得到下拉值。

模型,在IdCarBrand中我返回下拉值,其中填充了DropDownList列表:

public class CarModelModel
{
    public int IdCarBrand { get; set; }
    //Drop down
    public IEnumerable<SelectListItem> DropDownList { get; set; }
}

然后我使用此方法填充列表,service只访问数据库:

        public IEnumerable<SelectListItem> GetItemsDropDown()
       {
        SelectListItem listItem = null;
        CarBrandService service = new CarBrandService();
        var itemsList = service.GetAll().Select(x => 
            new SelectListItem{
                Value = x.Id.ToString(),
                Text = x.Name
            });

        return new SelectList(itemsList, "Value", "Text");
       }

并且在控制器中我有默认的创建操作

    public ActionResult Create()
    {

    }

这里的模型变量是

    public ActionResult Create([Bind(Include = "Id,Name,Description,URL,Email,Img")] CarModelModel brand)
    {
        if (ModelState.IsValid)
        {

            return RedirectToAction("Index");
        }

        return View(brand);
    }

现在在视图中我已经有了这个代码来创建dropdrown:

@Html.DropDownListFor(model => model.IdCarBrand, Model.DropDownList, new { htmlAttributes = new { @class = "form-control" } })

呈现的html是:

<select name="IdCarBrand" id="IdCarBrand" htmlattributes="{ class = form-control }" data-val-required="The IdCarBrand field is required." data-val-number="The field IdCarBrand must be a number." data-val="true" class="valid">
<option value="1">Alfa Romeo</option>
<option value="2">Audi</option>
<option value="3">BMW</option>
<option value="4">Chery</option>
<option value="5">Chrevrolet</option>.......

总之,下拉显示完美。 我有两个问题:

1-在Create Action中,IdCarBrand返回null。

2-视觉上下拉列表没有采用类格式控件:

1 个答案:

答案 0 :(得分:3)

在你的行动中..你没有包含它。

  public ActionResult Create([Bind(Include = "Id,Name,Description,URL,Email,Img,IdCarBrand")] CarModelModel brand)
    {
        if (ModelState.IsValid)
        {

            return RedirectToAction("Index");
        }

    return View(brand);
}

通过创建包含列表,您已将其排除在外。

对于下拉列表..修改如下。

@Html.DropDownListFor(model => model.IdCarBrand, Model.DropDownList,new { @class = "form-control" })