【问题标题】:MVC dropdrown not getting the value in the controllerMVC 下拉菜单未获取控制器中的值
【发布时间】:2015-03-15 06:29:27
【问题描述】:

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

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

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

然后我用这个方法填充列表,服务只是访问数据库:

        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);
    }

现在在视图中,我有这段代码来创建下拉菜单:

@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- 视觉上它没有采用类表单控件的下拉菜单:

【问题讨论】:

  • 您有一个 [Bind] 属性,它排除了属性 IdCarBrand(它不在 Include 属性列表中)
  • 能不能说的详细点,没看懂。
  • 也不需要创建你SelectList两次。 - 它可以是简单的 1 行代码 return new SelectList(service.GetAll(), "Id", "Name");
  • [Bind(Include = "..")] 指定绑定到模型时要包含的属性。所有不在列表中的属性都被排除在外(因此您的属性IdCarBrand 未绑定)。请注意,默认情况下所有属性都已绑定,因此您只需删除 [Bind] 属性即可。

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


【解决方案1】:

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

  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" })

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多