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

时间:2018-12-12 20:35:48

标签: c# asp.net-mvc asp.net-mvc-5

当尝试使用DataAnnotations提交模型中具有自定义验证集的表单时,出现错误消息“找不到路径'/ ItemController / IsAssetAvailable'的控制器或未实现IController”。

控制器布局:

Controller design

控制器代码:

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>

1 个答案:

答案 0 :(得分:2)

问题似乎来自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; }

相关问题:

Error based on Remote Validation in mvc