0

我已经用 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 来表示伦敦。

4

1 回答 1

1

看起来该AreaLookUpId属性是double在与所选值进行比较时导致问题的原因,因为您正在使用SqlFunctions.StringConvert并且格式可能不完全匹配。

我建议您对 id 属性使用整数或 guid。您也可以Selected = p.AreaLookUpId == selectedIdGetAreaLookUpSelectList函数中删除 。将控制器操作中的属性设置为相应的值就足够了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
        });
}
于 2012-10-27T16:36:46.453 回答