Asp-controller 和 asp-action 属性不工作

有人知道我错过了什么吗,为什么那些 asp-controller 和 asp-action 标签对我不起作用。我在 ASP.NET MVC 核心中实现了一个项目。

这不会开火:

<a asp-controller="App" asp-action="Trips" class="btn btn-lg btn-success">Go to Trips</a>

剃刀工作正常:

@Html.ActionLink("Go to Trips", "Trips", "App", new object { }, new { @class = "btn btn-lg btn-success" })

我是否需要配置一些服务才能工作。还有,你更喜欢哪种方式?Razor 在 MVC 中相当流行,那些 ASP 标签是一种新的、更好的方式吗?

57846 次浏览

经过一些挖掘,我发现 asp-controllerasp-action属性被称为锚标记助手,并且是

Microsoft.AspNetCore.Mvc.TagHelpers 命名空间

显然这是使用 Razor 的另一种选择。我可以通过创建“ _ ViewImport. cshtml”并在文件中添加以下内容来解决这个问题:

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

一旦做到这一点,锚标记助手是认可和按钮开始按预期工作。

在处理区域时,我必须将 _ ViewImport 复制到新的 Area MyArea 视图

@{
IDictionary<string, string> routeData = new Dictionary<string, string>();
routeData.Add("Id", point.Id.ToString());
routeData.Add("Name", point.Name);
routeData.Add("Address", point.Address);
}
<a asp-page="./AddCollectionPoint" asp-page-handler="Edit" asp-all-route-data="@routeData">

Razor Pages 拥有 modelcshtml.cs 文件,从“ PageModel”继承而来,所以在我的案例中,我在这些文件中的操作方法没有被识别... ... 我用 asp-page 替换了 asp-controller,用 asp-page 处理程序替换了 asp-action。Plus 在 startup.cs 中添加了一行默认路由。

   app.UseEndpoints(endpoints =>
{ endpoints.MapRazorPages(); endpoints.MapControllerRoute("default","{controller=Home}/{action=Index}");});

成功了。

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers添加到 cshtml 文件的顶部。

我花了一段时间才弄明白——但是如果你像我一样仍然在挣扎 在尝试了 接受的答案之后,您可能正在运行一个 ASP.NET MVC项目而不是 ASP.NET Core项目,因此不能使用 标签助手。相反,您必须使用 < a href = “ https://Learn.microsoft.com/en-us/dotnet/api/system.web.mvc.htmlhelper? view = aspnet-mvc-5.2”rel = “ nofollow norefrer”> htmlhelper

极低密度辐射;

如果 这个答案不适合你, 请使用 Html 助手(*)

@using (Html.BeginForm("Trips", "App"))
{
...
}

. . 而不是 标签助手(* *)

@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers




<form asp-controller="App" asp-action="Trips">
...
</form>

(*)适用于

NET MVC 5.2

(* *)适用于

NET Core 2.1.1.0,1.1,2.0,2.2,3.0,3.1,5.0

如果在“区域”中使用视图,请确保复制/Views 文件夹中的 _ ViewImport. cshtml 文件,并将其也复制到/Area//Views 文件夹中。

我也有同样的问题。而且操纵 _ViewImports.cshtml也没有帮助。像这样的小偷:

<a asp-controller="Contact" asp-action="GetContacts">Contact Form</a>

没有导航到控制器方法:

public class ContactController : Controller
{
public IActionResult GetContacts()
{
return View();
}
}

我所要做的就是通过 MapControllerRoute方法更新一点 Startup.cs

app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
endpoints.MapControllerRoute(name:"default", pattern:"{controller}/{action}");
});