在下拉列表更改时根据db的值更改标签显示名称标签
问题陈述:我想根据我从db获得的显示名称,在MVC的Razor视图中更改标签的显示名称(@ Html.LabelFor)。
我在_Layout.cshtml中添加了语言下拉列表
@Html.Action("Index", "LanguageDropdown", new { languageid = Request["languageId"] })
我创建了一个部分视图用于下拉:
@model ALCMS.Web.Models.Master_or_Configuration.LanguageDropdownModel function GetLanguage() { var languageId = $('#LanguageId').val(); var Url = "@Url.Content("~/MasterConfigGeneral/GetLanguage")"; $.ajax({ url: Url, dataType: 'json', data: { LanguageId: languageId }, success: function (data) { } }); } @Html.DropDownListFor(l => l.LanguageID, new SelectList(Model.Languages, "Value", "Text"), "Select Language", new { id = "LanguageId" ,onchange="GetLanguage()" })
部分视图控制器:
public ActionResult Index(string languageId) { //return View(); var languages = dbEntity.LookupLanguages; var model = new LanguageDropdownModel { LanguageID = languageId, Languages = languages.ToList().Select(l => new SelectListItem { Value = Convert.ToString(l.LanguageID), Text = l.Name }) }; return PartialView(model); }
在Controller Json Result方法中:
public JsonResult GetLanguage(int languageID) { JsonResult jsResult = new JsonResult(); objdbGlobalTenant.ddlLanguage = (from lsr in dbEntity.LocaleStringResources where lsr.LanguageID == languageID select new SelectListItem() { Text = lsr.ResourceValue, Value = lsr.ResourceName }).Distinct().ToList(); //ViewBag.Language = objdbGlobalTenant.ddlLanguage; jsResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet; return jsResult; }
现在一切正常。我可以根据语言下拉列表的更改事件在Controller中的Json Result方法中获取所选的langaugeID。 根据这个语言ID,我得到了我需要申请特定视图的显示名称(ResourceValue)。
问题:
- 1>从db获取显示名称后,如何在语言更改事件触发时更改特定视图的显示名称。 例如:目前我正在看Create.CSHTML。 现在,如果我更改语言下拉列表,它应该在控制器中触发Json事件,并且在获取值之后,它应该应用从db获得的视图上的值。
注意:下拉列表位于Layout.cshtml中(如.aspx中的master)
-
2>我在Layout.cshtml中放置的下拉列表每次加载新视图时都会刷新(layout.cshtml)。如何让控制器在回发期间保持它的状态?
-
3>如何从布局中获取多个选定的下拉项
控制器,根据布局中下拉列表的langaugeid更改每个视图中的显示名称
怎么做?如果我做错了建议我其他一些方法……
以下是建议:
问题1:您可以在每个标签中保留一个属性,以便唯一标识它们。
您的HTML应该呈现如下
这里label-unique-name
是您的属性 ,对于每种语言都将保持固定。 现在,当您从下拉列表中更改语言时,您将带来如下所示的值。
; ; ;
请注意:这只是为了理解,它不是JSON。
现在使用jQuery遍历每个标签并替换标签的值。 希望它能帮到你。
问题2:
您可以在会话中保存所选语言的值,并相应地生成下拉列表。
@Html.DropDownListFor(l => l.LanguageID, new SelectList(Model.Languages, "Value", "Text"), !string.isNullorEmpty(HttpContext.Current.Sessions["Language"]) ? HttpContext.Current.Sessions["Language"] : "Select Language", new { id = "LanguageId" ,onchange="GetLanguage()" })