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
您的问题是 PayerID
和 PayerId
中的不匹配:
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
它正在拾取您想要的错误消息作为区域路由值,因此请按照我上面提到的将其删除。
屏幕截图
我的代码是这样的
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
提供给 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
它正在拾取您想要的错误消息作为区域路由值,因此请按照我上面提到的将其删除。
屏幕截图