如何自动将当前路由中的特定值添加到所有生成的链接?

2023-12-10

我的 URL 中有网站文化,如下所示:

routes.MapRoute(
    "Default", 
    "{language}/{controller}/{action}/{id}", 
    languageDefaults, 
    languageConstraints)

它的工作方式就像一个魅力,需要自定义 MvcHttpHandler 的一点帮助,它根据路由值在每个请求上设置当前线程的 UI 区域性。我的问题是如何自动将当前请求中的语言路由值添加到所有传出链接?例如。当请求页面 /EN/Foo/Bar 时,我想要这个

<%=Html.ActionLink(
    "example link", 
    MVC.Home.Index()) %>

自动生成与此相同的结果:

<%=Html.ActionLink(
    "example link", 
    MVC.Home.Index()
        .AddRouteValue(
            "language", 
            this.ViewContext.RouteData.Values["language"]) %>

当然,对于所有其他帮助程序(例如 BeginForm() 等)也是如此。在我当前的代码库中,已经有超过 1000 次使用这些帮助程序的情况,并且每次都需要 .AddRouteValue 非常脆弱,因为一些开发人员会忘记使用它100% 确定。

我希望唯一的解决方案不是为所有内容创建自定义 Html 助手?


它应该保留路由中定义的所有值并存在于RouteData自动,除非您将其设置为其他内容。尝试在没有 T4MVC 的情况下创建链接或检查您的路由定义。像这样的东西对我来说很好用:

routes.MapRoute("Default with language", "{lang}/{controller}/{action}/{id}", new
{
    controller = "Home",
    action = "Index",
    id = UrlParameter.Optional,
}, new { lang = "de|fr" });
routes.MapRoute("Default", "{controller}/{action}/{id}", new
{
    controller = "Home",
    action = "Index",
    id = UrlParameter.Optional,
    lang = "en",
});

+

protected void Application_AcquireRequestState(object sender, EventArgs e)
{
    MvcHandler handler = Context.Handler as MvcHandler;
    if (handler == null)
        return;

    string lang = (string)handler.RequestContext.RouteData.Values["lang"];

    CultureInfo culture = CultureInfo.GetCultureInfo(lang);

    Thread.CurrentThread.CurrentUICulture = culture;
    Thread.CurrentThread.CurrentCulture = culture;
}

+

<%: Html.ActionLink("About us", "Detail", "Articles", new { @type = ArticleType.About }, null) %>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何自动将当前路由中的特定值添加到所有生成的链接? 的相关文章

  • 未找到键为“”的资源对象。自动部署的 ASP.NET MVC3 应用程序

    我有一个使用 LocalResources 本地化的 ASP NET MVC 3 应用程序 一切 一如既往 在我的机器上运行 但是当应用程序部署 通过 tfs 自动部署 到我的测试环境时 我收到以下错误 未找到键为 的资源对象 我的资源文件
  • 如何限制ajax日历扩展器中的年份

    我有一个日历延长器 我只想在日历中显示当前年份 用户无法选择 2010 年 因为当前年份是 2011 年 那么如何做到这一点呢 Use the StartDate and EndDate属性来设置您希望允许用户选择的可接受日期范围 您可以根
  • Dictionary(Of String, String) 和 IDictionary(Of String, String) 有什么区别

    我可以用 IDictionary 做更多或更少的事情吗 这两个集合有何不同 IDictionary 只是一个接口 一个描述实现类必须执行的操作的契约 Dictionary 是一个实现该接口的具体类 因此必须提供 IDictionary 接口
  • Windows 共享主机 - 自定义计划任务

    我有一个 Windows 共享主机 我需要每天运行一些预定的 C 可执行文件来创建站点地图 发送新闻通讯等 提供商告诉我 出于安全原因 我无法运行可执行文件 我能做什么 提供商建议我购买 VPS 但认为仅仅为了运行一些计划任务而花更多钱是没
  • 如何从用户控件引用母版页?

    我正在寻找一种方法 最好 从使用母版页的内容页中找到的用户控件强类型母版页 遗憾的是 您不能在用户控件中使用它 我试图从用户控件访问母版页的属性 而不必将该属性从母版页传递到内容页再传递给用户控件 因为多个内容页使用相同的用户控件 一处改变
  • 如何在asp.net C#中从http重定向到https并将其设为网站的默认版本

    如何在asp net c 中从http重定向到https 我已经安装了https证书现在我想将https设置为我的网站的默认版本 iam使用windows server 2008 R2 asp net C 4 0 您是否正在寻找这样的东西
  • 我们应该使用 Eval 还是 Databind 事件?

    当使用 Asp Net 并使用 ListView 等控件创建网站时 使用 Eval 命令是一个好习惯吗 还是应该在 databind 事件中填充文字和数据 取决于您是否想在更新事件上写回数据 在这种情况下数据绑定 如果您只想读取该数据 可以
  • 网页执行回发时如何停止在注册表单上?

    我正在做我的最后一年的项目 其中 我在一页上有登录和注册表单 WebForm 当用户点击锚点时Sign Up下拉菜单ddlType 隐藏 和文本框 txtCustName txtEmail and txtConfirmPassword 显示
  • 删除datagridview中的一行

    我想删除更新面板中 Gridview 中的一行 但我没有使用命令按钮 而是使用了链接按钮来获取确认消息 现在 如果我按 确定 则应删除该记录 从 db 和 frm girdview 中删除 我知道如何从数据库中删除 但不知道如何按下链接按钮
  • 捕获对 ASP.NET ASMX Web 服务的 SOAP 请求

    考虑将传入的 SOAP 请求记录到 ASP NET ASMX Web 服务的要求 任务是捕获发送到 Web 服务的原始 XML 需要记录传入消息以进行调试检查 该应用程序已经使用了自己的日志库 因此理想的用法如下 string or XML
  • 渲染以 Markdown 形式上传并在服务器端转换为 Html 的 Html 是否安全?

    我有一个网络表单 允许用户以 Markdown 形式上传文本 Markdown 在服务器上转换为 Html 使用 Markdig 并存储 当显示用户上传的转换后的 Html 时 我应该 Html Encode 内容 该项目采用 c MVC
  • 将 SqlDataReader 中的数据放入 HTML 表中

    我在数据库中有一些数据可以用来读取SqlDataReader 我想将它们放入我的 ASP NET 站点的 HTML 表中 但我不知道该怎么做 您可以使用网格视图 它是一个 asp net 控件 您只需将 datareader 绑定到 gri
  • 如何将 ComboBox 添加到 ASP.NET 未绑定的 GridView

    我想知道如何将 ComboBox 列添加到未绑定的 GridView通过运行时的代码 以编程方式 我过去使用过以下实现 ITemplate 的类 但用于 DropDown 和 CheckBox 绑定 public class AddTemp
  • Kendo UI 网格 - 显示行号

    如何在 Kendo UI 网格中显示行号 我的代码不起作用 页面显示该列 但它是空的 int counter 1 Html Kendo Grid
  • ASP.NET MVC 阻止用户直接访问 URL

    因此 我在 MVC 中创建了一个简单的 hello world 作为概念证明 索引视图列出了一些组成的记录 后面是典型的 编辑 详细信息 和 删除 操作链接 但是 根据哪个 AD 组拥有该记录 我不会呈现其中一些选项 举例来说 假设我要提取
  • 在 SignOut() 之后使用浏览器的后退按钮允许访问安全页面 (ASP.NET MVC)

    我有一个 MVC 应用程序 它使用 Authorize 来保护私有位 当我选择 SignOut URL 时 它会将我注销 但如果我点击浏览器上的后退按钮 它会转到安全页面 甚至允许我使用该表单 该操作发生 然后显示我已退出 问题是它执行安全
  • MVC Core使用ajax发布数据并刷新页面上的某个部分

    我正在开发 AspNet Core 2 0 MVC 网站 问题是 我在一个页面中有 2 个表单 第一个表单用于提交模型 这是通过以下操作完成的 HttpPost public IActionResult AddProductToSale F
  • 继承 IdentityUser 我在 UserManager 上收到错误

    我正在使用 NET Framework 4 5 1 和 Asp Net Identity 2 1 0 开发 Web Api 2 2 应用程序 我不确定我在做什么 但我想将我的数据库与 ASP NET Identity 数据库合并 我已经这样
  • 如何使用 ASP.NET MVC 4.0 DonutOutputCache VaryByCustom 使缓存失效

    我正在为我的 ASP NET 应用程序使用 DevTrends MvcDonutCaching 包 它工作得很好 我目前遇到的一个问题是使我为子操作设置的 VaryByCustom 缓存无效 这是我用于 VaryByCustom 设置的一些
  • 是否可以在 html 中将单选按钮标签助手值属性设置为“已选中”?

    我正在寻找一种方法来使用单选按钮标签帮助器上的值属性来通知按钮是否被选中 而不是使用单独的字段进行选择 我找到了 Shyju 的答案相关问题 https stackoverflow com questions 34570908 radio

随机推荐

  • 保留实体框架查询缓存

    我有一个 ASP NET MVC 5 Web 应用程序并使用 EF 6 1 访问我的数据库 我有一些相当复杂的 LINQ 查询 编译需要长达 10 秒的时间 但执行后只需几毫秒 EF 确实会很好地缓存此查询 并且第二次执行查询时 它会在这几
  • 从 Mac 测试 IE 的最佳工具 - 无需 PC [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 测试网站设计的跨浏览器兼容
  • 两个带有 count 的语句相除返回零

    我是 SQL 新手 使用 SQLiteStudio 并且正在尝试使用一些聚合函数 我想找到数据子集中个体数量小于 575 的比例 但查询始终返回零 SELECT A B 100 FROM SELECT COUNT AS A FROM Mal
  • 使用 RequestBody 的 POST 请求不起作用

    在下面的示例中 我使用 POST 和 GET 方法 post 是初始化一个变量 GET 是获取这个变量 我使用 Postman 来发出请求 我收到错误 RequestBody value val cant resolve method va
  • 使用自定义属性有效吗?

    我想取消任何链接并为每个链接添加额外的属性 下面是我是如何实现这一目标的 function anularEnlaces nav a each function var href this attr href var id this attr
  • C# 按字母顺序和长度对 Arraylist 字符串进行排序

    我正在尝试排序ArrayList of String Given A C AA B CC BB Arraylist Sort gives A AA B BB C CC 我需要的是 A B C AA BB CC ArrayList list
  • +0和-0一样吗?

    阅读通过ECMAScript 5 1 规范 0 and 0是杰出的 那么为什么呢 0 0评估为true JavaScript 使用IEEE 754 标准来表示数字 从维基百科 签名零为零并带有相关符号 在普通算术中 0 0 0 然而 在计算
  • Android 应用程序 - 如何获取联系人的生日

    我正在开发一个 Android 应用程序 我需要将每个联系人的生日与当前日期进行匹配 如果是的话 则处理一些业务逻辑 这需要完整的联系人详细信息 我找到了分别读取联系人生日或联系人本身的方法 但对如何将两者结合起来感到困惑 有人可以提供一些
  • 如何用段落标签包围所有文本片段? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我想在任何文本项周围放置段落标签 因此应该避免表格和其他元素 我怎么做 我想它可以用某种方式制成preg replace 以下是一些可以帮助您完成您想做的事情的函数 nl2p T
  • Yii2 gridview - 模式仅在单击第一行时显示

    我正在使用 kartik grid GridView 和 kartik grid ExpandRowColumn 来显示摘要信息 在 ExpandRowColumn 上 我有另一个 gridview 来列出详细信息 这部分工作正常 在 Ex
  • swift 3 Playground 中的回调[重复]

    这个问题在这里已经有答案了 您好 我正在尝试在操场上执行这行代码 但得到任何响应输出 我的代码如下 func testCallbackEmpty callback escaping gt Void DispatchQueue main as
  • 如何在 WordPress 插件中使用多媒体上传器?

    我尝试在 WordPress 插件中添加多重上传选项 我在插件中重复了此代码 两次 仅更改了 id 名称
  • 我可以使用反射访问 ItemsControl 的 ItemsHost 吗?

    我正在创建自定义ItemsControl这是源自DataGrid 我需要访问 ItemsHost 这是Panel实际上包含行DataGrid 我见过一些丑陋的技巧来做到这一点 但我认为它们比使用反射更糟糕 那么我可以使用反射访问 Items
  • 如何使用/导入http模块?

    我一直在玩Angular 2 快速入门 如何在 Angular 2 中使用 导入 http 模块 我看过Angular 2 Todo s js 但它不使用 http 模块 我已经添加 ngHttp angular http to depen
  • to_number Oracle SQL 中数字格式的动态长度

    我有一个表 其中的数字存储为varchar2和 作为小数点分隔符 例如 5 92843 我想使用 来计算这些数字 因为这是系统默认值 并且使用了以下内容to number去做这个 TO NUMBER number 99999D9999 NL
  • Neo4j 桌面打开时出错 - “无法读取未定义的属性“名称”

    我有一个运行 Windows Server 2016 的盒子 我在这里找到了有关 MAC 的问题的答案 neo4j 初始化错误 TypeError 无法读取未定义的属性 名称 这个答案似乎在 Windows 中不起作用 因为删除 AppDa
  • PHP 通过键和值创建数组

    我在下面的 PHP 代码中有一个数组 我想将该数组转换为按数据值分组 简化数组总是很困难 Array 0 gt Array video id gt 14 video title gt test1 video category name gt
  • 如何从聚合物组件访问父模型

    我将 my app 作为 index html 文件中的主要应用程序组件 并使用 model dart 作为其模型 这是我的应用程序模型 my app 以 my component 作为其内容 当用户与 my component 交互时 我
  • 如何在Python中获取字符串的大小(长度)

    例如 我得到一个字符串 str please answer my question 我想把它写入一个文件 但在将字符串写入文件之前我需要知道字符串的大小 我可以使用什么函数来计算字符串的大小 如果你正在谈论字符串的长度 你可以使用len g
  • 如何自动将当前路由中的特定值添加到所有生成的链接?

    我的 URL 中有网站文化 如下所示 routes MapRoute Default language controller action id languageDefaults languageConstraints 它的工作方式就像一个