使用远程验证、MVC 和 Razor Pages .NET Core 2.2 失败 ::: "InvalidOperationException: No URL for remote validation could be found"
Fail using Remote Validation, MVC, and Razor Pages .NET Core 2.2 ::: "InvalidOperationException: No URL for remote validation could be found"
目标:在使用 Razor Pages .NET Core 2.2 和 MVC 创建新帐户时仔细检查用户名是否存在。
错误:InvalidOperationException:找不到用于远程验证的 URL。
我查看了其他 Whosebug 线程,但目前没有任何解决方案。
我的用户名输入的数据注释:
[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。”
这是我的 Accounts.cs 用户名模型中的数据注释:
[Required]
[Remote("IsUserNameUsed", "Validations",ErrorMessage ="UserName already exists" ,HttpMethod ="post")]
public string UserName { get; set; }
这是 .cshtml Razor 页面上的用户名输入:
<div class="form-group">
<label asp-for="Accounts.UserName" class="control-label"></label>
<input asp-for="Accounts.UserName" class="form-control" />
<span asp-validation-for="Accounts.UserName" class="text-danger"></span>
</div>
这是控制器(ValidationsController)中的动作(JsonResult)。
请注意括号内的 Binding of UserName 字段。如果没有此语法,returns 为空。并且必须在 Controller/Json 中设置,而不是在模型中设置 -- [Bind(Prefix = "Accounts.UserName")] string NameEntered :
public JsonResult IsUserNameUsed([Bind(Prefix = "Accounts.UserName")] string NameEntered)
{
bool UserNameExists = _context.Accounts.Any(u => u.UserName.Equals(NameEntered));
return new JsonResult(!UserNameExists); //NOTICE OPPOSITE BOOLEAN
}
另请注意上面我是如何使用一行访问数据库 table 并仅使用另一行访问 JsonResult return 的。这是一种负二进制开关,您必须对其进行测试才能使其正确,因为 true(找到)实际上意味着 false(不能使用)。
现在,这里是我不断收到错误消息说我的路线错误的地方。
“InvalidOperationException: 找不到 URL 用于远程验证”
所以我尝试在模型中引用一个名为 JsonResult("IsUserNameUsed") 的自定义名称和一个自定义名称 Controller("Validations") 并在模型中给出该路径:
[Remote("IsUserNameUsed", "Validations",ErrorMessage ="UserName already exists" ,HttpMethod ="post")]
我不知道,但我发现了一些东西。 . .但 。 . . . .
由于它是一个 Razor Pages .NET Core 2.2 应用程序,我仍然必须在控制器顶部创建一个“使用 Microsoft.AspNetCore.Mvc”并将其放入配置部分的 Startup.cs 文件中。
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
注意上面的路由是 MVC 应用程序附带的默认路由(网站打开到索引页面)。有趣的是它是如何使用“id”的?尽管我正在验证一个 string.I 排除了一个 HomeController,但我认为如果它不存在它会触发错误。但。 . .没有错误。 . .Startup.cs 中只需要默认的 MVC 路由模板和一个自定义命名控制器和 2 个不同的路由。
但是,这 2 条路线使我的自定义控制器 JsonResult URL 工作来自模型的数据注释。清澈如泥?使用 MVC 自定义路由需要默认路由,请看图。
现在你知道故事的其余部分了。
警告:
我使用的是 2.2,但如果你有 3.0,现在有一个“RemotePage”数据注释,不需要 MVC。您可以在 https://www.learnrazorpages.com/
上找到它
目标:在使用 Razor Pages .NET Core 2.2 和 MVC 创建新帐户时仔细检查用户名是否存在。
错误:InvalidOperationException:找不到用于远程验证的 URL。
我查看了其他 Whosebug 线程,但目前没有任何解决方案。
我的用户名输入的数据注释:
[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。”
这是我的 Accounts.cs 用户名模型中的数据注释:
[Required]
[Remote("IsUserNameUsed", "Validations",ErrorMessage ="UserName already exists" ,HttpMethod ="post")]
public string UserName { get; set; }
这是 .cshtml Razor 页面上的用户名输入:
<div class="form-group">
<label asp-for="Accounts.UserName" class="control-label"></label>
<input asp-for="Accounts.UserName" class="form-control" />
<span asp-validation-for="Accounts.UserName" class="text-danger"></span>
</div>
这是控制器(ValidationsController)中的动作(JsonResult)。 请注意括号内的 Binding of UserName 字段。如果没有此语法,returns 为空。并且必须在 Controller/Json 中设置,而不是在模型中设置 -- [Bind(Prefix = "Accounts.UserName")] string NameEntered :
public JsonResult IsUserNameUsed([Bind(Prefix = "Accounts.UserName")] string NameEntered)
{
bool UserNameExists = _context.Accounts.Any(u => u.UserName.Equals(NameEntered));
return new JsonResult(!UserNameExists); //NOTICE OPPOSITE BOOLEAN
}
另请注意上面我是如何使用一行访问数据库 table 并仅使用另一行访问 JsonResult return 的。这是一种负二进制开关,您必须对其进行测试才能使其正确,因为 true(找到)实际上意味着 false(不能使用)。
现在,这里是我不断收到错误消息说我的路线错误的地方。
“InvalidOperationException: 找不到 URL 用于远程验证”
所以我尝试在模型中引用一个名为 JsonResult("IsUserNameUsed") 的自定义名称和一个自定义名称 Controller("Validations") 并在模型中给出该路径:
[Remote("IsUserNameUsed", "Validations",ErrorMessage ="UserName already exists" ,HttpMethod ="post")]
我不知道,但我发现了一些东西。 . .但 。 . . . . 由于它是一个 Razor Pages .NET Core 2.2 应用程序,我仍然必须在控制器顶部创建一个“使用 Microsoft.AspNetCore.Mvc”并将其放入配置部分的 Startup.cs 文件中。
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
注意上面的路由是 MVC 应用程序附带的默认路由(网站打开到索引页面)。有趣的是它是如何使用“id”的?尽管我正在验证一个 string.I 排除了一个 HomeController,但我认为如果它不存在它会触发错误。但。 . .没有错误。 . .Startup.cs 中只需要默认的 MVC 路由模板和一个自定义命名控制器和 2 个不同的路由。
但是,这 2 条路线使我的自定义控制器 JsonResult URL 工作来自模型的数据注释。清澈如泥?使用 MVC 自定义路由需要默认路由,请看图。
现在你知道故事的其余部分了。
警告: 我使用的是 2.2,但如果你有 3.0,现在有一个“RemotePage”数据注释,不需要 MVC。您可以在 https://www.learnrazorpages.com/
上找到它