如何在从控制器返回视图之前替换 html 标签文本,如标签或 h1 文本?

How to replace html tag text like label or h1 text before return View from Controller?

提问人:Noor Uddin 提问时间:11/14/2022 最后编辑:Noor Uddin 更新时间:11/14/2022 访问量:174

问:

我正在开发 ASP MVC .NET 6 应用程序。应用程序的默认语言是英语。现在,我们要求在管理面板中实现不同的语言选项,如西班牙语、阿拉伯语等。我们将为每个屏幕/视图设置一个 JSON 文件,其中将为屏幕的每个标签设置所有标签文本,如以下示例所示:

[
{
"LabelHtmlId": "FirstName",
"LablelText" : "User First Name",
"ScreenId": 1,
"LanguageCode: "Eng"
},
{
"LabelHtmlId": "LastName",
"LablelText" : "User Last Name",
"ScreenId": 1,
"LanguageCode: "Eng"
}
]

现在,管理员将能够为不同语言的每个屏幕标签设置JSON文件,如上面的示例所示。 现在我们的要求是,我们必须在控制器中的 Return View() 之前调用该函数。此函数将采用 ScreenId 和 lanuageCode 作为参数,并将替换 JSON 文件中 HTML 文件中的所有标签文本。 例如,如果标签如下所示:

<label id="FirstName">First Name</label>

现在,在控制器中执行 Return View() 之前的函数后,上面的文本将替换为:

 <label id="FirstName">User First Name</label>

因为管理员在此标签的 JSON 文件中添加了此文本。

现在我的问题是,一旦所有模型绑定都与 HTML 完成,我如何在返回 ActionMethod 的视图行之前获得完整的 HTML,以便我解析所有标签并替换 JSON 文件中的文本。是否有任何机制可以在 ActionExecuted 上应用客户筛选器。

请不要引用任何前端解决方案,如 JavaScript、jQuery,因为我们不会替换前端的标签文本。这不是要求。我们必须在返回 View() 之前在服务器端执行所有活动。如果我们在页面准备就绪后在前端实现,那么它将首先呈现默认文本,然后从 JSON 替换,因此客户可能无法顺利呈现页面。

谢谢

我正在考虑从 document.ready 上的 HTML 中获取所有标签,然后使用 JavaScript/jQuery 替换 JSON 文件中每个标签的文本,但此解决方案不可行,因为它会影响浏览器中页面的平滑呈现。一旦默认标签被呈现,它就会从JSON文件中替换,因此用户会感觉到标签的变化影响了从默认语言到所选语言。

我也有 HTMLAgilityCode 的想法,但在控制器中,我现在不知道如何在使用 HTML 进行所有数据绑定过程后以正确的方式实现它。

C# ASP.NET-CORE HTML 解析

评论

0赞 Joe_DM 11/14/2022
控制器不应“替换”视图中的任何内容。控制器应将模型返回到视图,然后视图应使用该模型。在深入研究 .Net 实现之前,也许值得先了解一下 MVC 模式的一般情况以及它的工作原理。
0赞 Joe_DM 11/14/2022
learn.microsoft.com/en-us/aspnet/core/fundamentals/......也可能有所帮助
0赞 Noor Uddin 11/14/2022
好的,但是在控制器中,您知道,指定了页面的返回 URL。因此,我们要么必须在 ActionMethod 的末尾行中执行活动,要么在操作方法流程完成时在任何客户过滤器中执行活动,或者执行任何其他想法?
0赞 Noor Uddin 11/14/2022
是的,它是本地化的有用资源。谢谢
0赞 Joe_DM 11/14/2022
通常,控制器在视图开始执行其工作之前已经完成了所有处理。然后,视图还可以呈现其他视图或部分视图,因此在控制器中执行工作不是一种选择。如果要实现自己的自定义项,假设本机本地化不适合你,并且愿意让视图执行独立的逻辑(这是反模式的),那么可以通过多种方式扩展视图逻辑。或者,您可以创建自己的辅助方法。例如,stackoverflow.com/questions/17195555/...

答: 暂无答案