我的代码是这样的

   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以将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需要呈现的属性,以查找其他属性,如果它不同或丢失,则设置失败,因此请检查是否有jquery.validate.jsjquery.validate.unobtrusive.js"的引用。

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

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


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

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


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

屏幕截图

09-12 20:05