MVC远程验证中的问题

时间:2015-03-12 10:52:00

标签: c# asp.net asp.net-mvc validation razor

我的代码就像这样

   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

1 个答案:

答案 0 :(得分:2)

您的问题是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.js和{{1}的引用也是jquery。

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

jquery.validate.unobtrusive.js"

同样来自更新中的渲染链接,即

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

它正在将您的预期错误消息作为区域路由值,因此请将其删除,如上所述。

截屏

debug

output