You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过锚标签调用带参数的MVC5控制器Index视图?

解决ASP.NET MVC中通过锚标签传递ApplicationId参数的问题

首先先揪出你代码里一个明显的小错误:你的JsRender模板里,href最后多了一个额外的右括号 ),这会导致生成的URL格式无效,服务器根本没法正确解析,先把这个括号删掉:

<script id="applicationDetailstemplate" type="text/x-jsrender">
  <a href="../../../Applicants/Applications/{{:id}}">{{:position}}</a>
</script>

接下来是核心问题:路由参数名不匹配。你的控制器Action参数是Guid? ApplicationId,但ASP.NET MVC的默认路由(定义在RouteConfig.cs里)默认的路径参数名是id,所以当你把ID放在URL路径里时,MVC没办法自动把路径里的id绑定到ApplicationId这个参数上,自然就触发不了预期的逻辑。

你可以通过以下几种方式解决这个问题:

方法1:修改Action参数名适配默认路由

最简单的方式就是把控制器里的参数名改成id,这样默认路由就能自动完成参数绑定:

public class ApplicationsController : Controller 
{ 
    // GET: Applicants/Applications 
    public ActionResult Index(Guid? id) 
    { 
        // 这里用id代替原来的ApplicationId做业务逻辑处理
        return View("Application Details"); 
    } 
}

方法2:自定义专属路由规则

如果不想修改参数名,可以在RouteConfig.cs里添加一个专门匹配这个Action的路由,明确指定参数名为ApplicationId:

routes.MapRoute(
    name: "ApplicationDetails",
    url: "Applicants/Applications/{ApplicationId}",
    defaults: new { controller = "Applications", action = "Index" }
);

注意要把这个路由放在默认路由的前面,因为MVC会按照路由定义的顺序进行匹配,先匹配到的路由会被优先使用。

方法3:用查询字符串传递参数

如果不想改动路由或参数名,直接用查询字符串传递ApplicationId是最稳妥的方式,这种方式不依赖路由规则,MVC会自动把查询字符串里的参数绑定到Action的对应参数上:

<script id="applicationDetailstemplate" type="text/x-jsrender">
  <a href="../../../Applicants/Applications?ApplicationId={{:id}}">{{:position}}</a>
</script>

另外,建议你尽量使用MVC的Url.Action辅助方法生成URL,而不是硬写相对路径,这样能避免页面层级变化导致的路径错误。如果是在JsRender里使用,可以先在Razor视图里生成基础URL,再在模板里拼接:

@{
    // 在Razor视图中生成Action的基础URL
    var baseUrl = Url.Action("Index", "Applications", new { area = "Applicants" });
}

<script id="applicationDetailstemplate" type="text/x-jsrender">
  <a href="@baseUrl?ApplicationId={{:id}}">{{:position}}</a>
</script>

最后,修改后记得测试一下生成的URL是否正确——点击链接后看浏览器地址栏的URL有没有多余字符,参数是否正确传递,这样就能确保Action被正确调用并获取到参数了。


内容的提问来源于stack exchange,提问作者Shalini Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:16:25