C# ASP.NET MVC dropdownlist值不反映模型的值
我有一个页面,允许我根据不同的预先定义的类别添加有趣的地点POI: 模型 创造 控制器 因此,当我创建一个新的POI时,我得到以下POI状态: TitleEng和TitleNor=null。因此,如果我将添加一个新的POI对象,那么Category对象(仅具有Id)也将被添加 所以类别并没有映射为属性,只有它的ID字段是。C# ASP.NET MVC dropdownlist值不反映模型的值,c#,asp.net-mvc,drop-down-menu,C#,Asp.net Mvc,Drop Down Menu,我有一个页面,允许我根据不同的预先定义的类别添加有趣的地点POI: 模型 创造 控制器 因此,当我创建一个新的POI时,我得到以下POI状态: TitleEng和TitleNor=null。因此,如果我将添加一个新的POI对象,那么Category对象(仅具有Id)也将被添加 所以类别并没有映射为属性,只有它的ID字段是。 据我所知,其中一个解决方案是更改POI模型,而不是只使用CategoryID的属性类别。但是,如果我不想更改模型,如何获得正确的映射呢?提前感谢。在回邮时,您只会收到发送给
据我所知,其中一个解决方案是更改POI模型,而不是只使用CategoryID的属性类别。但是,如果我不想更改模型,如何获得正确的映射呢?提前感谢。在回邮时,您只会收到发送给控制器的值。您只发送Category.Id。但您没有Category.TitleNor和Category.TitleEng的输入,因此它们将为空 您不能将@Html.DropDownListFormodel=>model.Category、ViewBag.Categories用作SelectList。。。因为类别是一个复杂的对象,控件只回发一个值
理想情况下,您应该使用包含属性public int CategoryID{get;set;}的视图模型来绑定下拉列表。您的类别是否包含与模型相同的列名?@krishnajrana如果您指的是TitleNor和TitleEng,那么是的。类别和POI都具有这样的属性。映射可能有问题吗?是的,我想,请检查拼写错误,如果拼写正确,然后在categoryQry linq查询中指定列名。您的意思是这是在回发时发生的吗?您不能使用model=>model.Category,因为model.Category是一个复杂的对象。控件只回发一个值。如果需要完全填充类别,则必须从数据库中再次获取。
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);