尝试在 MVC 5 中设置自定义验证时出错

Error when trying to set up custom validation in MVC 5

我尝试提交我的表单时收到错误消息 "The controller for path '/ItemController/IsAssetAvailable' was not found or does not implement IController",该表单在模型中使用 DataAnnotations 设置了自定义验证。

控制器布局:

控制器代码:

public ActionResult IsAssetAvailable(string Asset_Tag_Nbr)
    {
        using (db)
        {
            try
            {
                var asset = db.Items.Single(i => i.Asset_Tag_Nbr == Asset_Tag_Nbr);
                return Json(false, JsonRequestBehavior.AllowGet);
            }
            catch (Exception)
            {
                return Json(true, JsonRequestBehavior.AllowGet);
            }
        }
    }

数据注释:

[Display(Name = "Asset Tag #")]
[Remote("IsAssetAvailable", "ItemController", ErrorMessage = "Asset # already exists.")]
public string Asset_Tag_Nbr { get; set; }

查看:

<div class="form-group col-sm-4">
     @Html.LabelFor(model => model.Asset_Tag_Nbr, new { @class = "control-label col-md-12" })
     <div class="col-md-10">
         @Html.EditorFor(model => model.Asset_Tag_Nbr, new { htmlAttributes = new { @class = "form-control" } })
         @Html.ValidationMessageFor(model => model.Asset_Tag_Nbr)
     </div>
</div>

问题似乎来自于在 RemoteAttribute 中声明的控制器名称,如下所示:

[Remote("IsAssetAvailable", "ItemController", ErrorMessage = "Asset # already exists.")]
public string Asset_Tag_Nbr { get; set; }

您正在使用 RouteAttribute with 2 overloads:

public RemoteAttribute (string action, string controller)

controller参数是指包含对应动作方法名的控制器名,不用Controller后缀。因此,您应该使用 RouteAttribute 参数,如下例所示:

[Display(Name = "Asset Tag #")]
[Remote("IsAssetAvailable", "Item", ErrorMessage = "Asset # already exists.")]
public string Asset_Tag_Nbr { get; set; }

相关问题: