ASP.NET MVC下拉列表值并不反映模型的值

时间:2014-09-09 09:10:17

标签: c# asp.net-mvc drop-down-menu

我有页面,允许我根据不同的预定类别添加有趣的地方(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 。但是,如果我不想更改模型,我怎样才能获得正确的映射?提前谢谢。

1 个答案:

答案 0 :(得分:1)

在回发后,您只会获得发送给控制器的值。您只发送Category.Id.(来自下拉列表),但您没有Category.TitleNorCategory.TitleEng的输入,因此它们将为空。

您无法使用@Html.DropDownListFor(model=>model.Category, ViewBag.Categories as SelectList ...,因为Category是一个复杂的对象而控件只回发一个值。

理想情况下,您应该使用包含属性public int CategoryID { get; set; }的视图模型来绑定到下拉列表。