问题陈述:我想根据我从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)。
问题:
注意:下拉列表位于Layout.cshtml中(就像.aspx中的master一样)
2&gt;我放在Layout.cshtml中的下拉菜单正在刷新 每次加载新视图时都会继承(layout.cshtml)。如何 让控制器在回发期间保持它的状态??
3&gt;如何从多个布局中获取所选的下拉项目 控制器,根据langaugeid更改每个视图中的显示名称 布局中的下拉列表
如何做到这一点?如果我做错了,建议我采取其他一些方式......
答案 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()" })