使用ASP.NET Core进行远程验证

时间:2016-03-16 10:30:00

标签: asp.net-core asp.net-core-mvc

我正在尝试按如下方式创建远程验证:

[Remote("CheckValue", "Validate", ErrorMessage="Value is not valid")]
public string Value { get; set; }

我正在使用ASP.NET Core(ASP.NET 5),似乎Remote不可用。 有谁知道如何使用ASP.NET CORE执行此操作?

2 个答案:

答案 0 :(得分:6)

RemoteAttribute是ASP.Net MVC Core的一部分:

  • 如果您使用的是RC1,则它位于Microsoft.AspNet.Mvc命名空间中。请参阅github中的RemoteAttribute
  • 在RC2中计划重命名后,它将位于Microsoft.AspNetCore.Mvc命名空间中。请参阅github中的RemoteAttribute

例如,在RC1中创建一个带有身份验证的新MVC站点。然后使用虚拟远程验证更新生成的LoginViewModel,调用家庭控制器中的方法:

using Microsoft.AspNet.Mvc;
using System.ComponentModel.DataAnnotations;
public class LoginViewModel
{
    [Required]
    [EmailAddress]
    [Remote("Foo", "Home", ErrorMessage = "Remote validation is working")]
    public string Email { get; set; }

    ...
}

如果您在家庭控制器中创建该虚拟方法并设置断点,则只要您在登录表单中更改电子邮件,就会看到它被点击:

public class HomeController : Controller
{

    ...

    public bool Foo()
    {
        return false;
    }
}

答案 1 :(得分:0)

与此同时,文档已存在且可用here。简而言之,您只需要使用以下内容装饰视图模型的属性:

    [Remote(action: "Foo", controller: "Bar", ErrorMessage = "Remote validation is working")]
    [Required]        
    [Display(Name = "Name")]
    public string Name { get; set; }

然后在控制器中创建一个动作(在本例中名为'Foo')(在本例中名为'Bar')并在那里添加你的逻辑:

  [AcceptVerbs("Get", "Post")]
  public async Task<IActionResult> Foo(string name)
  {
      bool exists = await this.Service.Exists(name);
      if (exists)
          return Json(data: false);
      else
          return Json(data: true);
  }

最后注意:Remote属性位于Microsoft.AspNetCore.Mvc命名空间中。