远程属性未击中动作控制器方法

时间:2019-07-02 18:57:04

标签: c# asp.net-core

我正在尝试在Asp.net-core 2.2中使用远程属性验证,但是我没有在验证控制器中使用action方法。

提供了这些脚本

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

验证控制器

    [Authorize]
    public class ValidationController : Controller
    {
        [AcceptVerbs("Get", "Post")]
        public IActionResult ValidateDupliciteName(string name)
        {
            var test = false;

            return Json(test);
        }
    }

ViewModel

    [Remote("ValidateDupliciteName", "Validation")]
    public string name { get; set; }

和模型绑定的视图,我正在使用淘汰赛。

<input type="text" class="input-validation-error form-control" data-bind="value: @(nameof(Model.name))" />

我没有收到任何错误消息,当我在action方法内设置断点时,它不会被命中。 问题可能是当我在chrome中打开开发人员工具时,看不到验证控制器操作方法的任何url请求...

2 个答案:

答案 0 :(得分:0)

请确保您的视图中有表单元素。 Name属性必须在form元素内。 您还必须考虑以下部分;

 @section Scripts {        
        @{await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
    }

答案 1 :(得分:0)

对于“远程验证”属性,它与下面的代码一起使用

<input asp-for="Name" class="form-control" />

它将在呈现视图期间生成类似的html。

<input class="form-control" type="text" data-val="true" data-val-remote="'Name' is invalid." 
  data-val-remote-additionalfields="*.Name" data-val-remote-url="/Validation/ValidateDupliciteName" 
  id="Name" name="Name" value="">

对于您的代码,它不包含此代码,并且knockout将不会生成与远程相关的html代码。

如果您更喜欢淘汰赛,则需要使用ajax来实现自己的请求,并且可以参考Validation / Remote Validation with knockout.js in vb.net mvc