我有页面,允许我根据不同的预定类别添加有趣的地方(POI):
public class POI
{
public long Id { get; set; }
public string TitleNor { get; set; }
public string TitleEng { get; set; }
public Category Category { get; set; }
public string DescriptionNor { get; set; }
public string DescriptionEng { get; set; }
public float Latitude { get; set; }
public float Longitude { get; set; }
public string ImagePath { get; set; }
public HttpPostedFileBase UploadedPhoto { get; set; }
}
public class Category
{
public int Id { get; set; }
public string TitleNor { get; set; }
public string TitleEng { get; set; }
}
@Html.DropDownListFor(model=>model.Category.Id, ViewBag.Categories as SelectList, "", new { @class = "form-control" })
List<Category> categories = new List<Category>();
var categoryQry = from d in db.Categories
select d;
categories.AddRange(categoryQry.Distinct());
ViewBag.Categories = new SelectList(categories, "Id", "TitleNor");
return View(pOI);
因此,当我创建新的POI时,我会得到以下POI状态:state POI http://i60.tinypic.com/9zt5a8.png
TitleEng 和 TitleNor = null 。因此,如果我要添加新的POI对象,则还会添加类别对象,仅包含Id。
所以类别未映射为属性,只有它的ID是。 据我所知,其中一个解决方案是更改POI模型,而不是属性类别只有 CategoryID 。但是,如果我不想更改模型,我怎样才能获得正确的映射?提前谢谢。
答案 0 :(得分:1)
在回发后,您只会获得发送给控制器的值。您只发送Category.Id.
(来自下拉列表),但您没有Category.TitleNor
和Category.TitleEng
的输入,因此它们将为空。
您无法使用@Html.DropDownListFor(model=>model.Category, ViewBag.Categories as SelectList ...
,因为Category
是一个复杂的对象而控件只回发一个值。
理想情况下,您应该使用包含属性public int CategoryID { get; set; }
的视图模型来绑定到下拉列表。