我已经看过4到5个不同的视频,两个页面和1个SO链接谈论Razor页面中的远程验证,但我没有从这些例子中得到一些东西。例如,在示例中,我看到他们正在使用重复电子邮件检查器的变体。这是一个简单的例子,我有点明白是怎么回事,但我还没有能够推断出我的项目
在我的站点中,我有一个包含FromProperty的ItemModel,它是一个位置。我正在核对输入框中的内容与已知地点的列表。我已经把它添加到我的页面。
public async Task<JsonResult> OnPostCheckLocation(string location)
{
LocationModel ValidLocation = await LocationModel.CreateAsync(location);
var check = ValidLocation.Location;
var valid = !check.Equals("XXX");
// "X" is just a placeholder for
// an invalid location
return new JsonResult(valid);
}
如果输入的位置与数据库中的任何内容都不匹配,则ValidLocation将返回“XXX”。我需要做的下一件事是添加Page Remote属性,但我不清楚它的位置。我尝试在ItemModel属性之上添加页面模型。
public ItemModel Item { get; set; } = new ItemModel();
我试过在ItemModel类中的FromLocation属性之上放置,但都没有命中我的OnPostCheckLocation方法。我也试过其他几种方法,但我从来没有能够让它工作。这是我使用的远程页面属性
[PageRemote(ErrorMessage = "Invalid Location",
HttpMethod = "post",
PageHandler = "CheckLocation")]
最后,my _ValidationScriptsPartial.cshtml确实包含了jquery.validate和jquery.validate.unobtrusive。那么,有人可以帮助我了解远程页面属性应该去哪里,让我知道,如果有其他东西,我错过了吗?
1条答案
按热度按时间sqxo8psd1#
都没有命中我的OnPostCheckLocation方法
您可以使用
F12
查看控制台中是否有任何错误消息。您可能会遇到400错误。因为在您的Remote Page属性中您错过了AdditionalFields
:验证请求中应包含的其他字段的逗号分隔列表。AdditionalFields
属性必须包含请求验证令牌,因为默认情况下在Razor Pages中进行请求验证。如果POST请求中不包含此字段,则请求将失败,并显示400 Bad Request状态代码。Razor Pages远程验证要求要验证的属性必须是PageModel类的直接后代(即不是PageModel的子属性的属性,也称为“嵌套属性”)
尝试将PageRemote属性应用于剃刀页面中的location属性,并在当前页面中设置页面处理程序方法:
下面是一个工作演示,你可以参考一下:
IndexModel.cshtml.cs
IndexModel.cshtml:
结果: