ViewBag.Hotel_Rate = new SelectList(db.Hotel_Rate, "Id", "Rate");
我在我的视图中有代码填充下拉列表
@Html.DropDownList("Hotel_Rate", null, new { @Name = "Hotel_Rate.Rate", @id = "Hotel_Rate.Rate" })
每件事都应该在这里,drowpdown列表从datebase填充并显示在我的视图中,但是当我将模型发布到控制器模型时验证但是酒店费率的id是零,所以我得到了EntityValidationErrors&#39 ; 我绑定有什么问题? 我不想使用任何客户模型绑定类,asp.net中的默认模型绑定器能够处理,但如何处理?
public partial class Hotel
{
public Hotel()
{
}
public int Id { get; set; }
public string Name { get; set; }
public virtual Hotel_Rate Rate { get; set; }
}
public partial class Hotel_Rate
{
public Hotel_Rate()
{
this.Hotel = new HashSet<Hotel>();
}
public int Id { get; set; }
public string Rate { get; set; }
public string Description { get; set; }
public virtual ICollection<Hotel> Hotel { get; set; }
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,Name,Hotel_Rate")] Hotel hotel)
{
if (ModelState.IsValid)
{
db.Hotels.Add(hotel);
db.SaveChanges();
return RedirectToAction("Index");
}
生成的html如下
<select name="Hotel_Rate.Rate" id="Hotel_Rate.Rate">
<option value="1">5</option>
<option value="2">4</option>
</select>
答案 0 :(得分:1)
您有2个问题,即控件的命名和[Bind(Include ..)]
属性的使用,因为您没有名为Hotel_Rate
的属性,其中包含属性Rate
(这是什么<select name="Hotel_Rate.Rate" ..>
正试图绑定到。)
使用强类型帮助程序确保不会发生命名问题
@Html.DropDownListFor(m => m.Rate.Rate, (SelectList)ViewBag.Hotel_Rate)
将呈现
<select name="Rate.Rate" id="Rate_Rate">
<option value="1">5</option>
<option value="2">4</option>
</select>
请注意,目前还不清楚您要绑定的内容。您的SelectList
的值为ID
,显示文字为Rate
,因此我实际上认为您需要m => m.Rate.ID
,否则您的约束1
或{{1} }}当我认为您要将2
或Rate
绑定到1
属性
2
属性
您的ID
属性应为
Bind
但是由于您已在public ActionResult Create([Bind(Include = "Id,Name,Rate")] Hotel hotel)
列表中包含Hotel
的所有属性,因此它毫无意义,可以完全删除。