我在c#中有两个poco类,一个酒店和一个价格,这是控制器中酒店创建动作中的一对多关系。我有一个视图袋来填充下拉列表,如下所示
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的问题是什么我的约束力?我不想使用任何定制模型绑定类,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>
您有两个问题,控件的命名和[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
或者2
到Rate
时我想你要绑定属性1
或2
对ID
财产
您的Bind
属性应为
public ActionResult Create([Bind(Include = "Id,Name,Rate")] Hotel hotel)
但由于您已将的所有属性都包含Hotel
在Include
列表中,因此它毫无意义,可以完全删除。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句