C# 提交表单时,有没有办法生成路由值而不是查询参数?
我有以下表格C# 提交表单时,有没有办法生成路由值而不是查询参数?,c#,asp.net,asp.net-core,razor-pages,C#,Asp.net,Asp.net Core,Razor Pages,我有以下表格 <form method="get"> <div class="row"> <div class="col-md-4"> <div class="form-group"> <select asp-for="@Model.MonthCode" asp-items="@Model.InvoiceDates" class="form-control">
<form method="get">
<div class="row">
<div class="col-md-4">
<div class="form-group">
<select asp-for="@Model.MonthCode" asp-items="@Model.InvoiceDates" class="form-control">
</select>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<button type="submit" class="btn btn-success">Update</button>
</div>
</div>
</div>
</form>
我更喜欢URL:
https://localhost:44322/Invoices/24243
有没有办法让这段代码生成第二个URL?我希望我的用户不会得到参数的描述。将路由参数名称放在razor页面的顶部
。cshtml
侧:
@page "{MonthCode}"
在后端,属性可以定义为:
[BindProperty(SupportsGet=true)]
公共int MonthCode{get;set;}
感觉更干净的解决方案可能是将OnGetAsync()
中的代码提取到助手方法中,然后从OnPostAsync()
调用该方法
除非
OnGetAsync()
的实现非常小,否则我通常避免在页面中放入太多逻辑。(我们曾经在web表单(.aspx页面)中尝试过,但结果并不理想!;-)您可以对查询进行加密string@viveknuna:是的,我能做到。但我只是想知道是否有任何方法可以产生我喜欢的URL。这似乎不适合我。我已经有了@page“{monthCode?}”
。我尝试添加BindProperty
,但没有设置它(仍然为零)。而且URL是相同的。(虽然设置了myOnGetAsync(int?monthCode)
的参数。)尝试不使用似乎没有任何区别的?
Nullable。是否在启动时启用了端点<代码>app.UseEndpoints(端点=>{endpoints.MapRazorPages();})代码>是<代码>app.UseEndpoints(端点=>{endpoints.MapRazorPages();})是的,我考虑过这个。只是我对剃须刀的页面还是有点陌生,仍然在搞一些常规的东西。所以我想知道是否有一种方法可以满足我的需求。这是正确的答案。如果方法是“get”,操作是一个HTTP URI,那么用户代理将获取操作的值,向其附加一个“?”,然后附加表单数据集,使用“application/x-www-form-urlencoded”内容类型进行编码。-鉴于这是HTML规范的一部分,无法绕过它。
@page "{MonthCode}"