很明显
<form asp-route="GetRouteName()"></form>
将不起作用,因为它将传递“GetRouteName()”字符串而不是方法调用的结果。
然而,
<form asp-route="@GetRouteName()"></form>
<form asp-route="@route"></form>
-
创建一个空的ASP.NET 核心MVC应用程序:
dotnet new mvc
-
添加控制器进行测试(
):
public class TestController : Controller
{
public IActionResult Index()
{
if (HttpMethods.IsGet(Request.Method))
return View();
else
return Content($"{Request.Method} {UriHelper.BuildRelative(Request.PathBase, Request.Path, Request.QueryString)}");
}
}
-
添加相关视图(
视图/测试/Index.cshtml
@functions { string GetRouteName() => "MyRouteName"; }
@{ string route = GetRouteName(); /* returns "MyRouteName" */ }
<p>Route name: @route</p>
<p>Route: @Url.RouteUrl(route)</p>
<form asp-route="@route">
<input type="submit" value="Submit" />
</form>
-
定义一个名为
在
Startup.Configure
方法:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "MyRouteName",
template: "Test/{action}",
defaults: new { controller = "Test" });
routes.MapRoute(
name: "AnotherRouteName",
template: "",
defaults: new { controller = "Home", action = "Index" });
});
-
启动应用程序,导航到
/Test/Index
生成的HTML表单的属性是正确的(测试日期ASP.NET 核心2.0和2.1。)
问题很可能出在您的路由配置上:空路由
行动
asp路由