【问题标题】:issues in MVC remote validationMVC 远程验证中的问题
【发布时间】:2015-03-12 10:52:00
【问题描述】:

我的代码是这样的

   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

【问题讨论】:

  • 为什么你在public JsonResult PayerNameExists(string Name,int PayerID=0) 中将玩家 ID 分配为 0... 删除并重新测试
  • 您是否在视图中为PayerID 呈现控件? - 例如@Html.HiddenFor(m => m.PayerID)?
  • 也许是缺少绑定属性? stackoverflow.com/questions/13330783/…
  • @StephenMuecke 是的。我正在渲染它
  • @Juan 试过了。不工作

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


【解决方案1】:

您的问题是 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" 的引用以及 jquery。

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

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

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

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

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

屏幕截图

【讨论】:

  • 试过了,还是一样的错误。从客户端发送像 PayerID=undefined
  • @Athul 只需更改模型,然后改为匹配PayerID,它应该会选择它。
  • @Athul,DefaultModelBinder 不区分大小写,因此参数名称可以是 pAyERiD 并且它会绑定,但 javascript 是,所以如果属性名称是,它需要是 AdditionalFields = "PayerId" PayerId。如果这不能解决问题,请使用浏览器工具在 jquery.validate.js 中的 remote 函数上放置断点并检查值。
猜你喜欢
  • 1970-01-01
  • 2012-03-30
  • 2011-07-31
  • 1970-01-01
  • 2011-12-20
  • 2011-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多