未触发MVC 5远程验证

时间:2018-09-20 13:49:36

标签: c# asp.net-mvc razor metadata remote-validation

我正在尝试在MVC中实现远程验证。我已经阅读了一些Tutos和已经在此处发布的问题,但是没有答案。

控制器:

public class GroupsController: Controller
{
    [HttpPost]
    public ActionResult TestRemoteValidation(string Name)
    {
        return Json(false);
    }
}

视图:

@using (Html.BeginForm("Index", "Defaults", FormMethod.Post))
{
      @Html.TextBoxFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
      @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })

     <input type="submit" class="btn btn-primary" value="Enregistrer" />
}

和模型:

public class Group
{
    [Key]
    public int Id { get; set; }
    [Display(Name = "Nom du Groupe")]
    [Required]
    [Remote("TestRemoteValidation", "Groups", HttpMethod = "POST", ErrorMessage = "Remote fired")]
    //[CustomRemoteValidation("TestRemoteValidation", "Groups", AdditionalFields = "Id")]
    public string Name { get; set; }

    public virtual ICollection<ApplicationUser> ApplicationUsers { get; set; }
}

生成的HTML代码:

<input data-val="true" data-val-remote="Remote fired" data-val-remote-additionalfields="*.Name" data-val-remote-type="POST" data-val-remote-url="/Groups/TestRemoteValidation" data-val-required="Le champ Nom du Groupe est requis." htmlAttributes="{ class = form-control }" id="Name" name="Name" type="text" value="" />

我使用Metadata是因为它是一个实体->没问题,我与另一个ViewModel进行了检查,并且相同。

[Required][StringLength(10)]被触发。 当我在TestRemoteValidation中设置断点时,什么也没发生。

例如,我能够使用自定义的远程属性类和Model.IsValid覆盖来执行远程验证,但是我不明白为什么这种方式行不通。有想法吗?

3 个答案:

答案 0 :(得分:0)

假设Vehicule是视图中使用的@model

@model Vehicule

然后控制器应该期望该模型

public class DefaultsController : Controller {
    [HttpGet]
    public ActionResult Index() {
        var model = new Vehicule();
        return View(mdoel);
    }

    [HttpPost]
    public ActionResult Index(Vehicule model) {
        if(ModelState.IsValid) {
            //...do something
            //..possible redirect 
        }
        //if we get this far something is wrong with data
        return View(model);
    }
}

当从请求中绑定模型时,模型绑定器将考虑验证。

答案 1 :(得分:0)

添加

[允许匿名]

[HttpPost]     公共ActionResult TestRemoteValidation(字符串名称)

答案 2 :(得分:0)

请确保您以正确的顺序包含了以下库

<script src="~/scripts/jquery.js"></script>
<script src="~/scripts/jquery.validate.js"></script>
<script src="~/scripts/jquery.validate.unobtrusive.js"></script>

这些库是远程验证起作用所必需的。

相关问题