我的代码是这样的
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
最佳答案
您的问题是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
和jquery.validate.unobtrusive.js"
的引用。该属性对我不起作用,我必须删除错误消息。无论如何,这是从服务器返回的。
[Remote("PayerNameExists", "Home", AdditionalFields = "PayerID"), Required]
也来自您在更新中呈现的链接,即
/Payer/PayerNameExists?area=Payer%20name%20%20already%20exists.&Name=ICICIx&PayerID=undefined
它正在将您预期的错误消息作为区域路由值,因此请按照我上面提到的方法将其删除。
屏幕截图