0
我一直在用Html.DropDownListFor和MVC3将我的头撞了两天。DropDownListFor并显示SelectedValue
我已成功创建一个下拉列表并成功更新基于它的数据库 。
我创建了一个下拉列表区域
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的值来代表伦敦。
功能SqlFunctions.StringConvert((双)p.AreaLookUpId)只接受小数或双。但你的其他建议奏效了。尽管你缺少“Selected = x.AreaLookUpId == selectedId”。非常感谢 – Tripping
不,我不会错过'Selected = x.AreaLookUpId == selectedId'。我已经明确删除它。下拉列表的选定值是通过'viewModel.UserProfile.Area'值确定的。在您的控制器操作中,您只需将其设置为您想要预选的相应值(您已通过设置“UserProfile”属性完成该操作)。 –