首页 > 解决方案 > MVC 5 远程验证未触发

问题描述

我正在尝试在 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覆盖,但我不明白为什么这种方式不起作用。任何想法?

标签: c#asp.net-mvcrazormetadataremote-validation

解决方案


假设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);
    }
}

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


推荐阅读