在下拉列表更改时根据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()" })