我的代码就像这样
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
答案 0 :(得分:2)
您的问题是PayerID
和PayerId
中的错误匹配:
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.js
和{{1}的引用也是jquery。
该属性对我不起作用,我不得不删除错误消息。无论如何,这都是从服务器返回的。
jquery.validate.unobtrusive.js"
同样来自更新中的渲染链接,即
[Remote("PayerNameExists", "Home", AdditionalFields = "PayerID"), Required]
它正在将您的预期错误消息作为区域路由值,因此请将其删除,如上所述。
截屏