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>

ViewModel

public class UpdateProfileViewModel
{
   public UserProfile UserProfile { get; set; }
   public IEnumerable<SelectListItem> AreaLookUps { get; set; }
}

選択した値を表示するのを手伝ってください。プロファイルの作成中にそのオプションが選択された場合は、ドロップダウンリストで「ロンドン」と言います。データベースには、ロンドンを表す2の値が格納されています。

4

1 に答える 1

1

を使用していて、形式が正確に一致しない可能性があるため、選択した値と比較するときに問題が発生しているAreaLookUpIdプロパティのようです。doubleSqlFunctions.StringConvert

idプロパティには整数またはGUIDを使用することをお勧めします。Selected = p.AreaLookUpId == selectedIdまた、関数からを削除することもできますGetAreaLookUpSelectListviewModel.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 に答える