【问题标题】:Change label display name labels, based on the values from db, on dropdown change在下拉更改时根据 db 中的值更改标签显示名称标签
【发布时间】:2014-03-12 08:11:21
【问题描述】:

问题说明:我想根据从 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;
        }

现在一切正常。我可以根据 Language 下拉菜单的 change 事件在 Controller 的 Json Result 方法中获取选定的 langaugeID。基于此语言 ID,我得到了我需要为特定视图申请的显示名称(资源值)。

问题:

  • 1>从 db 获取显示名称后如何更改显示名称 语言更改事件触发时的特殊观点。??为了 例如:目前我看到的是 Create.CSHTML。现在如果我改变 语言下拉菜单它应该触发控制器中的 Json 事件和 获取值后,它应该将值应用于它的视图 从 db 获得。

注意: Dropdown 在 Layout.cshtml 中(类似于 .aspx 中的 master)

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

  • 3>如何从多个布局中获取选中的下拉项
    控制器,根据语言更改每个视图中的显示名称 布局中的下拉菜单

如何做到这一点??如果我做错了建议我其他方法...

【问题讨论】:

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


    【解决方案1】:

    以下是建议:

    问题 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()" })
    

    【讨论】:

    • 对于您的第二个答案,我们需要为 HttpContext.Current.Session["Language"] 设置值?
    • 您需要在下拉列表的值更改时进行设置。在您的情况下,您可以将其设置为 int GetLanguage() 函数。请注意,当用户注销时不要忘记清除会话。默认情况下,Plus 会话将保持该值约 20 分钟。您可以在 web.config 文件中更改此值。
    • !string.IsNullOrEmpty(HttpContext.Current.Session["Language"].ToString()) ? HttpContext.Current.Session["Language"].ToString() : "Select Language" 给出的对象引用未设置为对象异常的实例(空异常)
    • 会话的值是否存储正确?
    • 按照你的建议,我在 GetLanguage 方法中设置 Session["Language"]=languageID,这将在更改事件时触发。但在此之前,我将从中定义的操作结果方法中填充下拉列表下拉部分视图的控制器。在视图中获取下拉菜单的语言后,我遇到了错误。
    猜你喜欢
    • 2020-05-05
    • 1970-01-01
    • 2018-06-10
    • 2019-02-19
    • 1970-01-01
    • 2020-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多