sec*_*age 0 c# asp.net-core-mvc tag-helpers
在index.cshtml中,我使用锚标记助手作为
<a asp-action="Edit" asp-route-id="@Model.Id" asp-route-firstname="@Model.Name"</a>
Run Code Online (Sandbox Code Playgroud)
并在动作方法中
public IActionResult Edit(string id, string firstname)
{
// id and firstname are assigned correct values
// but RouteData.Values only has three entries which are: controller, action and id, where is firstname?
}
Run Code Online (Sandbox Code Playgroud)
但是我不能通过访问访问firstname值,RouteData.Values["firstname"];
而可以通过访问id值RouteData.Values["id"];
,为什么它对id有效但对其他自定义属性无效?
RouteData
将只包含与路由相关的数据。这是什么数据,取决于用于导航到您的操作的路由模板。
默认路由模板如下所示:{controller=Home}/{action=Index}/{id?}
。忽略默认值,模板就是这样的:{controller}/{action}/{id?}
。
因此,有3位在路由模板:controller
,action
,和可选的id
。这些是您将能够看到的RouteData.Values
值,因为这些值用于匹配路由模板。
当您查看由标签帮助程序生成的URL时,也可以看到此信息。它应该看起来有点像这样:/Home/Edit/123?firstname=name
。该id
是路线的一部分,而firstname
仅仅作为查询参数传递。
这也意味着,您可以访问firstname
通过HttpContext.Request.Query
其中包含被传递的查询参数。请注意,id
是不是,虽然,因为它是作为路线数据,而不是作为查询数据通过包含在那里。
现在,当您将模型绑定与控制器操作一起使用时,很幸运,您无需进行这种区分。通过默认行为,您只需将它们指定为操作方法的参数,即可获取路由参数和查询参数。当然,推荐使用模型绑定来访问这些值,建立机制RouteData.Values
以及Request.Query
相当低级的机制。
归档时间: |
|
查看次数: |
31 次 |
最近记录: |