在ASP.NET Core的MVC开发架构中,视图向控制器传递数据是前后端交互的基础场景之一,通过href链接传递数据是最常用的方式,适用于页面跳转时附带简单参数的需求。

基础QueryString传参方式
QueryString是href链接传参最直观的形式,参数以?开头,多个参数用&连接,控制器方法通过同名的形参直接接收参数值。
视图中的href链接定义
在Razor视图中,可以直接拼接参数到链接地址后,示例如下:
<a href="/Home/Detail?id=1001&name=测试商品">查看商品详情</a> <!-- 也可以使用ASP.NET Core的标签助手生成链接,避免硬编码路由 --> <a asp-controller="Home" asp-action="Detail" asp-route-id="1001" asp-route-name="测试商品">查看商品详情</a>
控制器方法接收参数
控制器中对应的方法只需要定义和链接参数同名的形参,框架会自动完成参数绑定:
using Microsoft.AspNetCore.Mvc;
public class HomeController : Controller
{
// 方法形参名称和QueryString的参数名一致即可接收
public IActionResult Detail(int id, string name)
{
ViewBag.GoodsId = id;
ViewBag.GoodsName = name;
return View();
}
}路由参数绑定传参
如果提前在路由配置中定义了参数占位符,也可以把参数作为路由的一部分传递,这种方式链接结构更简洁,适合RESTful风格的接口。
路由配置
在Program.cs中配置对应的路由规则,示例如下:
app.MapControllerRoute(
name: "goodsDetail",
pattern: "Home/Detail/{id}/{name}",
defaults: new { controller = "Home", action = "Detail" }
);视图和控制器实现
视图中的href链接只需要按照路由格式拼接参数即可:
<a href="/Home/Detail/1001/测试商品">查看商品详情</a>
控制器方法的接收逻辑和之前一致,框架会自动从路由中匹配对应的参数值:
public IActionResult Detail(int id, string name)
{
// 逻辑处理和之前相同
return View();
}传递复杂参数的处理
如果需要传递多个参数或者复杂类型的数据,不建议把所有参数都拼接到href链接中,可以通过结合临时存储或者编码的方式处理。如果是少量额外参数,也可以继续拼接,控制器可以用对象接收,示例如下:
// 定义参数对应的实体类
public class GoodsQuery
{
public int Id { get; set; }
public string Name { get; set; }
public decimal Price { get; set; }
}
// 控制器方法可以直接接收实体对象,框架会自动绑定QueryString中的对应参数
public IActionResult Detail(GoodsQuery query)
{
// query.Id query.Name query.Price 都可以直接获取
return View();
}注意事项
- 如果参数中包含中文、空格等特殊字符,链接会自动进行URL编码,控制器接收时会自动解码,不需要额外处理。
- 使用标签助手生成链接时,如果参数值是变量,可以直接写在
asp-route-后面跟上参数名的位置,例如asp-route-id="@goodsId"。 - 如果传递的参数涉及敏感信息,不建议使用href链接传参,因为参数会显示在地址栏中,可以选择表单提交或者加密处理。
- 当参数类型不匹配时,比如链接传递的是字符串类型的id,控制器形参定义的是int,会返回400错误,需要提前做好参数校验。
ASP.NET_Corehref链接传参视图控制器交互MVC路由配置QueryString参数修改时间:2026-06-03 02:51:05