我现在用Html.DropDownListFor和MVC3敲打了2天。
我成功创建了一个下拉列表并成功更新了数据库 基于它。
我为区域
创建了一个下拉列表1 - NewYork
2 - London
3 - Paris
etc
创建用户可以更改之前的编辑页面时会出现问题 选择。我试图在下拉列表中显示之前选择的值。
我的代码如下:
控制器:
//
// GET: /MyHome/UpdateProfile
public ActionResult UpdateProfile()
{
var userProfile = websiteRepository.GetProfileForLoggedUser();
UpdateProfileViewModel viewModel = new UpdateProfileViewModel
{
AreaLookUps = websiteRepository.GetAreaLookUpSelectList(userProfile.Area),
UserProfile = userProfile
};
return View("UpdateProfile", viewModel);
}
GetAreaLookUpSelectList方法
public IEnumerable<SelectListItem> GetAreaLookUpSelectList(int selectedId)
{
var areaLookUps = from p in db.AreaLookUp
orderby p.AreaLookUpDescription
select new SelectListItem
{
Text = p.AreaLookUpDescription,
Value = SqlFunctions.StringConvert((double)p.AreaLookUpId),
Selected = p.AreaLookUpId == selectedId
};
return areaLookUps;
}
查看
@model NPLHWebsite.ViewModels.UpdateProfileViewModel
<div class="editor-label">
@Html.LabelFor(model => model.UserProfile.Area)
@Html.DropDownListFor(model => model.UserProfile.Area, Model.AreaLookUps, "--Select Area--")
</div>
视图模型
public class UpdateProfileViewModel
{
public UserProfile UserProfile { get; set; }
public IEnumerable<SelectListItem> AreaLookUps { get; set; }
}
请帮我显示所选值。如果在创建配置文件时选择了该选项,请在下拉列表中说“伦敦”。数据库存储值2表示伦敦。
答案 0 :(得分:1)
看起来AreaLookUpId
属性是double
,在与所选值进行比较时会导致问题,因为您使用的是SqlFunctions.StringConvert
且格式可能不完全匹配。
我建议你使用整数或guid作为id属性。您也可以从Selected = p.AreaLookUpId == selectedId
功能中删除GetAreaLookUpSelectList
。将控制器操作中的viewModel.UserProfile.Area
属性设置为相应的值(您已经完成)就足够了:
public IEnumerable<SelectListItem> GetAreaLookUpSelectList(int selectedId)
{
return db
.AreaLookUp
.OrderBy(x => x.AreaLookUpDescription)
.ToList()
.Select(x => new SelectListItem
{
Value = x.AreaLookUpId.ToString(),
Text = x.AreaLookUpDescription
});
}