【发布时间】: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