似乎在ASP.NET 5中的TagHelpers和HTMLHelpers中内置了某种控制器验证 但是,不是在构建项目时给出编译错误或警告,而是将控制器和方法名称呈现为空字符串。
模拟:
我在我的项目中创建了一个名为MyCustomController的控制器
我有默认的Home Controller,但我的任何控制器中都没有Dog ActionMethod
<a asp-controller="Home" asp-action="Dog" asp-route-id="1">Dog</a>
渲染
<a href="">Dog</a>
我希望URL显式呈现给/ Home / Dog /
另一个例子:(我故意为创建添加路由ID)
<a asp-controller="MyCustom" asp-action="Create" asp-route-id="1">Month Create</a>
<a asp-controller="MyCustom" asp-action="Edit" asp-route-id="1">Month Edit</a>
<a asp-controller="MyCustom" asp-action="Delete" asp-route-id="1">Month Delete</a>
MyCustomController方法:
[HttpGet]
public IActionResult Create()
[HttpGet]
public async Task<IActionResult> Edit(int id)
[HttpGet("{id:int}")]
public async Task<IActionResult> Delete(int id)
呈现给:
<a href="/MyCustom/Create/1">Create</a>
<a href="/1">Edit</a>
<a href="/1">Delete</a>
我看不出TagHelpers没有在网址中为“编辑”和“删除”呈现“控制器”和“操作方法”名称的原因。
我还测试了HTML ActionLink Helpers,输出与TagHelpers相同
@Html.ActionLink("Create", "Create", new { id = item.Id })
@Html.ActionLink("Edit", "Edit", new { id = item.Id })
@Html.ActionLink("Delete", "Delete", new { id = item.Id })
渲染为:
<a href="/MyCustom/Create/1">Create</a>
<a href="/1">Edit</a>
<a href="/1">Delete</a>
然后花了我相当长的时间进行调试,因为没有迹象表明问题是什么。 我修理了它:
我的问题: 有没有办法设置TagHelpers和HtmlHelpers显式呈现而不验证控制器?
答案 0 :(得分:0)
您可以在mvc repro。
中创建相关问题如果您不喜欢默认行为,可以更改默认值或使用自己的标记符替换默认值。例如,请参阅Taghelpers
答案 1 :(得分:0)
我发布了this question作为ASP.NET MV GitHub repos问题
这是我从Ryan Nowak
收到的回复这是对路由行为的更改。您可以恢复原状,如下所示:
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Routing;
using Microsoft.Extensions.DependencyInjection;
namespace BestEffortLinkGenerationWebSite
{
public class Startup
{
// Set up application services
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.Configure<RouteOptions>((options) =>
{
options.UseBestEffortLinkGeneration = true;
});
}
public void Configure(IApplicationBuilder app)
{
app.UseCultureReplacer();
app.UseMvcWithDefaultRoute();
}
}
}