0

<select>在 Razor 视图上有一个元素。它呈现为带有语言值的下拉框。我通过自定义 cookie 和自定义 cookie 感知视图引擎设置语言。

假设我有一个 cookie 集(称为language)。我想要一个视图渲染,并<option>根据 cookie 值将相应标记为选中。如何使用 Razor 控制它?

4

1 回答 1

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);

这使选择哪种语言的逻辑远离实际选择列表的呈现。如果经常使用,您可以将所有这些逻辑放在一个共享方法中。

于 2012-04-16T20:43:15.657 回答