2015-04-03 139 views
0

我有一个页面,它允许用户更改他们的隐私设置为:选择所选项目的下拉列表中的动作

  • 他们贴出的食谱
  • 他们的个人资料
  • 他们公布名单

我想要组成我的代码,以便当用户加载此页面时,用于选择其隐私设置的下拉列表显示其当前设置,因此如果他们的配方隐私设置为“注册红色用户“,只要他们加载隐私设置页面,我希望它启动时选择”注册用户“。

起初,我创建了一个名为PrivacySettings

List<SelectListItem> PrivacySettings = new List<SelectListItem>(); 

      PrivacySettings.Add(
       new SelectListItem 
       { 
        Text="Anybody", 
        Value = "0" 
       }); 
      PrivacySettings.Add(
       new SelectListItem 
       { 
        Text = "Registered users", 
        Value = "1" 
       }); 
      PrivacySettings.Add(
       new SelectListItem 
       { 
        Text = "Only me", 
        Value = "2" 
       }); 

然后,我创建三个独立的SelectList实例SelectListItem实例的列表。以下是我将每个列表的选定值分配给与用户保存设置相匹配的第一个值的部分。

SelectList RecipePrivacyList = new SelectList(
       PrivacySettings, 
       "Value", 
       "Text", 
       PrivacySettings.First(x => x.Value == LoggedInUser.RecipePrivacy.ToString())); 


      SelectList ProfilePrivacyList = new SelectList(
       PrivacySettings, 
       "Value", 
       "Text", 
       PrivacySettings.First(x => x.Value == LoggedInUserProfile.Privacy.ToString())); 

      SelectList ListPrivacyList = new SelectList(
       PrivacySettings, 
       "Value", 
       "Text", 
       PrivacySettings.First(x => x.Value == LoggedInUser.ListPrivacy.ToString())); 

然后我给你每一种分离ViewData

ViewData["RecipePrivacy"] = RecipePrivacyList; 
ViewData["ProfilePrivacy"] = ProfilePrivacyList; 
ViewData["ListPrivacy"] = ListPrivacyList; 

在我看来,我检索这些并将它们存储到变量

var ProfilePrivacy = (SelectList)ViewBag.ProfilePrivacy; 
var RecipePrivacy = (SelectList)ViewBag.RecipePrivacy; 
var ListPrivacy = (SelectList)ViewBag.ListPrivacy; 

最后我用Html.DropDownList() helper方法使用上述变量创建列表

@Html.DropDownList("profile-privacy", ProfilePrivacy, new { @class = "profile-privacy" }) 

加载视图时,无论用户的实际设置如何,都会选择第一个值(“任何人”或值为0)。

+0

也许看看使用'@ DropDownListFor' – 2015-04-03 18:47:27

回答

1

你必须设置SelectList这样的选择项:

SelectList ListPrivacyList = new SelectList(
PrivacySettings, 
"Value", 
"Text", 
PrivacySettings.First(x => x.Value == LoggedInUser.ListPrivacy.ToString()).Value); 
相关问题