在下拉列表更改时根据db的值更改标签显示名称标签

时间:2014-03-12 08:11:21

标签: javascript jquery asp.net-mvc json razor

问题陈述:我想根据我从db获取的显示名称,在MVC的Razor视图中更改标签的显示名称(@ Html.LabelFor)。

我在 _Layout.cshtml

中添加了语言下拉列表
 <li>@Html.Action("Index", "LanguageDropdown", new { languageid = Request["languageId"] })</li>

我为下拉菜单创建了一个部分视图:

@model ALCMS.Web.Models.Master_or_Configuration.LanguageDropdownModel
    <script type="text/javascript">
        function GetLanguage() {
            var languageId = $('#LanguageId').val();
            var Url = "@Url.Content("~/MasterConfigGeneral/GetLanguage")";
            $.ajax({
                url: Url,
                dataType: 'json',
                data: { LanguageId: languageId },
                success: function (data) {
                }
            });
        }
        </script>
    <div style="display:inline-block">

   @Html.DropDownListFor(l => l.LanguageID, new SelectList(Model.Languages, "Value", "Text"), "Select Language", new { id = "LanguageId" ,onchange="GetLanguage()" })
        </div>

部分视图控制器:

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

            //ViewBag.Language = objdbGlobalTenant.ddlLanguage;
            jsResult.JsonRequestBehavior = JsonRequestBehavior.AllowGet;

            return jsResult;
        }

现在一切正常。我可以根据语言下拉列表的更改事件在Controller中的Json Result方法中获取所选的langaugeID。根据这个语言ID,我得到了我需要申请特定视图的显示名称(ResourceValue)。

问题:

  • 1&gt;从db获取显示名称后如何更改显示名称 语言变化事件触发时的特定视图。对于 例如:目前我正在看Create.CSHTML。现在,如果我改变了 语言下拉列表它应该在控制器中触发Json事件 获取值后,它应该应用视图上的值 来自db。

注意:下拉列表位于Layout.cshtml中(就像.aspx中的master一样)

  • 2&gt;我放在Layout.cshtml中的下拉菜单正在刷新 每次加载新视图时都会继承(layout.cshtml)。如何 让控制器在回发期间保持它的状态??

  • 3&gt;如何从多个布局中获取所选的下拉项目 控制器,根据langaugeid更改每个视图中的显示名称 布局中的下拉列表

如何做到这一点?如果我做错了,建议我采取其他一些方式......

1 个答案:

答案 0 :(得分:0)

以下是建议:

问题1: 您可以在每个标签中保留一个属性,以便唯一标识它们。

您的HTML应如下所示呈现

<!-- For English -->
<label label-unique-name="Name">Name</label>
<label label-unique-name="Surname">Surname</label>

<!-- For French -->
<label label-unique-name="Name">nom</label>
<label label-unique-name="Surname">nom de famille</label>

<!-- For Spanish -->
<label label-unique-name="Name">nombre</label>  
<label label-unique-name="Surname">apellido</label>

此处label-unique-name是您的属性,对于每种语言都将保持不变。现在,当您从下拉列表中更改语言时,您将带来如下所示的值。

<!-- For English -->
<label-unique-name:"Name",label-value:"Name">;<label-unique-name:"Surname",label-value:"Surname">

<!-- For French -->
<label-unique-name:"Name",label-value:"nom">;<label-unique-name:"Surname",label-value:"nom de famille">

<!-- For English -->
<label-unique-name:"Name",label-value:"nombre">;<label-unique-name:"Surname",label-value:"apellido">

请注意:这只是为了理解,它不是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()" })
相关问题