我<select>
在 Razor 视图上有一个元素。它呈现为带有语言值的下拉框。我通过自定义 cookie 和自定义 cookie 感知视图引擎设置语言。
假设我有一个 cookie 集(称为language
)。我想要一个视图渲染,并<option>
根据 cookie 值将相应标记为选中。如何使用 Razor 控制它?
我<select>
在 Razor 视图上有一个元素。它呈现为带有语言值的下拉框。我通过自定义 cookie 和自定义 cookie 感知视图引擎设置语言。
假设我有一个 cookie 集(称为language
)。我想要一个视图渲染,并<option>
根据 cookie 值将相应标记为选中。如何使用 Razor 控制它?
好吧,我会将选择放在强类型的局部视图中:
@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);
这使选择哪种语言的逻辑远离实际选择列表的呈现。如果经常使用,您可以将所有这些逻辑放在一个共享方法中。