2012-04-16 44 views
0

我在Razor视图上有<select>元素。它呈现为具有语言值的下拉框。我通过自定义Cookie和一个自定义的Cookie识别视图引擎来设置语言。在Razor视图引擎中设置基于Cookie的html选择值的选定值

比方说,我有一个cookie集(称为language)。我希望有一个视图呈现,其中相应的<option>标记为基于cookie值进行选择。我如何使用Razor控制它?

回答

1

嗯,我会把选择一个强类型的局部视图:

@inherits System.Web.Mvc.WebViewPage<Language> 
@Html.DropDownListFor(x => x, 
        new SelectList((List<Language>)ViewBag.AllLanguages, 
        "Id", 
        "Text", 
        Model==null?-1:Model.Id), "Choose Language") 

我真的设置的值在我的控制器

public virtual ActionResult _MyAction() 
{ 
    // get users language 
    string selectedLanguage = "English"; // default 
    if(Request.Cookies["language"] != null) 
    { 
     selectedLanguage = Request.Cookies["lang"].ToString(); 
    } 

    // language list 
    ViewBag.AllLanguages = context.Languages.ToList(); 

    // retrieve language from database - example using EF 
    ViewBag.SelectedLanguage = context.Languages 
             .FirstOrDefault(l=>l.Text==selectedLanguage); 

,然后在我的主要观点

@Html.Partial("LanguageSelect", ViewBag.SelectedLanguage); 

这使得选择什么语言的逻辑远离实际选择列表的陈述吨。如果使用很多,你可以把所有的逻辑放在一个共享的方法中。