【发布时间】:2020-12-12 15:07:31
【问题描述】:
目标:使用 Razor Pages .NET Core 2.2 和 MVC 创建新帐户时,仔细检查用户名是否存在。
错误:InvalidOperationException:找不到远程验证的 URL。
我查看了其他 StackOverflow 线程,但目前没有任何解决方案。
用户名输入的我的数据注释:
[Microsoft.AspNetCore.Mvc.Remote("IsUserNameUsed", "ValidationsController", ErrorMessage = "Username is taken.")]
public string UserName { get; set; }
我在 Controller ValidationsController 中的代码:
public IActionResult IsUserNameUsed([Bind(Prefix = "Accounts.UserName")] string username)
{
string query = "SELECT UserName FROM Accounts WHERE UserName={0}";
var found = _context.Accounts
.FromSql(query, username)
.FirstOrDefault();
if (found.Equals(username))
{
return Json(true);
}
else
{
return Json(false);
}
}
我在尝试导航到有问题的 Razor 页面时收到此错误。
InvalidOperationException: No URL for remote validation could be found.
<input asp-for="Accounts.UserName" class="form-control" />
我发现提到将 MVC 路由添加到严格的 Razor Pages 应用程序。我添加了下面的代码,但无论我添加什么,我都会收到错误。
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
我使用实际的控制器名称尝试了不同的路由值,这是任务:
routes.MapRoute(
name: "default",
template: "{controller=Validations}/{action=IsUserNameUsed}/{username?}");
再试一次(没有“?”):
name: "default",
template: "{controller=Validations}/{action=IsUserNameUsed}/{username}");
又是另一个(没有用户名):
name: "default",
template: "{controller=Validations}/{action=IsUserNameUsed}");
我知道如果它是一条蛇,它会咬我,但我完全傻眼了。
我仍然收到“InvalidOperationException:找不到远程验证的 URL。”
【问题讨论】:
-
“ValidationsController”->“验证”docs.microsoft.com/en-us/aspnet/core/mvc/models/…
-
谢谢 mjwills。我有那个部分。我通过跟踪和错误找到了答案,并在不同的谷歌搜索和 ASP.NET 论坛和 www.LearnRazorPages.com 中寻找答案。
-
见下文。我花了这么长时间来填写它。很多不同的部分。必须在 Razor 页面的 Startup.cs 中输入默认 MVC 路由,才能使用模型数据注释中引用的自定义路由。大量的试验和错误。此外,该字段必须绑定到控制器上进入 JsonResult 的位置,否则它只会在设置断点时显示 null。
标签: c# asp.net-mvc razor routes data-annotations