MVC 远程验证中的问题

issues in MVC remote validation

我的代码是这样的

   public class Payer
{
    public int PayerId { get; set; }
    [Remote("PayerNameExists", "Payer", "Payer name  already exists.", AdditionalFields = "PayerID"), Required]
    public string Name { get; set; }
    public double PatientContribution { get; set; }
}

内部控制器

 public JsonResult PayerNameExists(string Name,int PayerID=0)
{

    var user = db.Payer.Where(x => x.Name == Name.Trim()&&x.PayerId!=PayerID);
    return !user.Any() ?
        Json(true, JsonRequestBehavior.AllowGet) :
        Json(string.Format("{0} is already exists.", Name),
            JsonRequestBehavior.AllowGet);
}

并且在视图中 (Edit)

   @Html.TextBoxFor(model => model.Name)

我的问题是在函数 PayerNameExists PayerID 中总是出现 zero 我希望在那里得到我的模型 ID。谁能告诉我如何才能做到这一点?

注意:客户端发送的数据是这样的

/Payer/PayerNameExists?area=Payer%20name%20%20already%20exists.&Name=ICICIx&PayerID=undefined

您的问题是 PayerIDPayerId 中的不匹配:

AdditionalFields = "PayerID"

需要这样:

AdditionalFields = "PayerId"

你的方法必须是这样的:

public JsonResult PayerNameExists(string Name,int PayerId=0)

或者将您的模型更改为:

public int PayerID { get; set; }

更新

如上所述,我需要将模型更改为 PayerID 才能正常工作,但并非所有人都同意,因为它被否决了。

但是我还需要做以下事情:

Html.Helper 提供给 post 返回 PayerID@Html.HiddenFor(model => model.PayerID),否则它将变为默认值。

如果您遇到未指定的错误,您可能需要检查呈现的 html,它需要有如下内容:

<input data-val="true" data-val-remote="'Name' is invalid." data-val-remote-additionalfields="*.Name,*.PayerID" data-val-remote-url="/Home/PayerNameExists" data-val-required="The Name field is required." id="Name" name="Name" type="text" value="Name" class="input-validation-error">

注意 data-val-remote-additionalfields 因为这是 jquery 需要呈现的内容以查找其他属性,如果它不同或丢失则设置失败,因此请检查您是否有对 [=24= 的引用] 和 jquery.validate.unobtrusive.js" 也 jquery.

该属性对我不起作用,我不得不删除错误消息。这无论如何都会从服务器返回。

    [Remote("PayerNameExists", "Home", AdditionalFields = "PayerID"), Required]

也来自您在更新中呈现的link,即

/Payer/PayerNameExists?area=Payer%20name%20%20already%20exists.&Name=ICICIx&PayerID=undefined

它正在拾取您想要的错误消息作为区域路由值,因此请按照我上面提到的将其删除。

屏幕截图