在剃刀页面中改进了远程今天福彩字谜总汇

远程今天福彩字谜总汇是一种使用客户端脚本的技术 要在不发布整个表单的情况下今天福彩字谜总汇服务器上的用户输入。 远程今天福彩字谜总汇始终可以使用剃刀页面使用 RemoteAttribute,这需要一个 MVC控制器工作,或通过编写自定义客户端脚本。一个几乎完全忽视的功能 ASP.NET Core 3.0包含剃刀页面的介绍 今天福彩字谜总汇属性,用于删除对MVC控制器或自定义代码进行远程今天福彩字谜总汇的依赖性。

ASP.NET(核心)中的远程今天福彩字谜总汇依赖于 Unobtrusive AJAX,所以您需要先安装这一点。这 最简单的方法是通过libman。右键点击 lib 文件夹 wwwroot., 选择 添加 » 客户端库,然后选择 jsdelivr 作为 the source, and type in jquery-ajax-unobtrusive, You should see it 出现在可用的软件包列表中:

jquery不引人注目的ajax.

用于远程今天福彩字谜总汇的常用情况是检查用户名是否 或者在数据库中已存在的电子邮件地址,如果您的业务规则 不要允许重复。更好地专注于应用遥控器 今天福彩字谜总汇,此演示功能具有只有一个输入的表单。这是一个示例PageModel类 that includes a property named Email:

public class RemoteValidationTestModel : PageModel
{
    [BindProperty]
    public string Email { get; set; }
    public void OnGet()
    {
 
    }
}

这里是一种包含输入的表单 Email property, and a 今天福彩字谜总汇标签助手.

<form  method="post">
    <input 作为 p-for="Email" /> 
    <span 作为 p-validation-for="Email"></span><br>
    <input type="submit"/>
</form>

正如我之前提到的,远程今天福彩字谜总汇依赖于不引人注目的Ajax, 所以你需要引用jquery,不引人注目的ajax和 与表单相同的页面上的不引声今天福彩字谜总汇库。你怎么 这样做取决于您可能需要的应用程序中的其他位置 这些库,但下面的代码说明了如何包含全部 of them in a single page within a @section block:

@section scripts{ 
    <script src="~/lib/jquery/dist/jquery.min.js"></script>
    <partial name="_ValidationScriptsPartial" />
    <script src="~/lib/jquery-ajax-unobtrusive/dist/jquery.unobtrusive-ajax.min.js"></script>
}

现在你需要添加一个 handler method 执行今天福彩字谜总汇。处理程序方法本身 必须提供JSON响应,指示今天福彩字谜总汇是否成功或 failed (true or false). The following example 使用命名处理程序,如前所述将添加到同一PageModel中的:

public JsonResult OnPostCheckEmail()
{
    var existingEmails = new[] { "[email protected]", "[email protected]", "[email protected]" };
    var valid = !existingEmails.Contains(Email);
    return new JsonResult(valid);
}

在现实世界中,这个处理程序将比较提交的电子邮件 到数据库记录的地址,但在演示之地中,它检查是否存在 email is one of three hard coded values, returning true if not (i.e. the email is a valid value) and false if it is a duplicate.

最后一步是应用新的远程今天福彩字谜总汇属性,即 called a PageRemoteAttribute. It shares many of the same properties as the MVC RemoteAttribute:

财产描述
添加itionalFields逗号 分隔的其他字段列表应包含在内 今天福彩字谜总汇请求
ErrorMessage错误消息 显示在今天福彩字谜总汇失败的情况下
ErrorMessageResourceName资源的名称 存储错误消息的位置,如果使用一个
ErrorMessageResourceType资源的类型 用于存储错误消息
HttpMethod要用于请求的HTTP动词 (GET or POST). Default is GET

The PageRemote attribute also includes a couple of other properties: PageName and PageHandler. The PageName is the name of the page that the request should be sent to, and the PageHandler 是应该调用的处理程序方法的名称。在这两种情况下,如果省略它们,则将使用“环境值”即,当前页面,以及以往任何传统名为的处理程序方法响应使用的HTTP动词。

The PageRemote attribute is applied to the property that needs validating. In this example, the configuration of the PageRemote attribute is as follows:

[PageRemote(
    ErrorMessage ="!!! Duplicate Email Address !!!", 
    AdditionalFields = "__RequestVerificationToken", 
    HttpMethod ="post",  
    PageHandler ="CheckEmail"
)]
[BindProperty]
public string Email { get; set; }

The handler method that performs validation is set up to respond to POST requests. It is in the same page as the property to be validated so the PageName is omitted. The 添加itionalFields 属性设置为包括隐藏的 请求今天福彩字谜总汇令牌 由表单标签助手生成。如果你 don't include this field for POST requests, the 请求将使用400个不良请求状态代码失败.

这就是它的全部。如果您运行该页面并输入其中一个 硬编码的电子邮件地址,更改事件触发AJAX请求和 validates the value:

剃刀页面的远程今天福彩字谜总汇

剃刀页面的远程今天福彩字谜总汇

概括

The PageRemote attribute was introduced in ASP.NET Core 3.0 没有任何粉丝(直到现在)。这是一个很好的补充 删除剃刀页面应用程序中对控制器的需求 简单有效地执行远程今天福彩字谜总汇。