【问题标题】:RemoteAttribute is not passing parameter to action?RemoteAttribute 没有将参数传递给操作?
【发布时间】:2013-08-07 20:16:20
【问题描述】:

我正在尝试使用 RemoteAttribute 来验证使用 JSON 的数据元素服务器端。 我的数据字段是:

[Display(Name = "My Number")]
    [Required]
    [Remote("IsValidMyNumber","Home",ErrorMessage="Bummer")]
    public string MyNumber { get; set; }

我的控制器是:

  public JsonResult IsValidMyNumber(string MyNumber)
    {
        var test = services.ValidateMyNumber(MyNumber);
        return Json(test,JsonRequestBehavior.AllowGet);
    }

我的看法是:

    <div class="editor-field">
    @Html.EditorFor(model => model.CheckInformation.MyNumber) 
    @Html.ValidationMessageFor(model => model.CheckInformation.MyNumber)
</div>

生成的 HTML 是:

 <input class="text-box single-line" data-val="true" data-val-remote="Bummer" 
data-val-remote-additionalfields="*.MyNumber" data-val-remote-url="/Home/IsValidMyNumber" 
data-val-required="The Number field is required." id="CheckInformation_MyNumber"
 name="CheckInformation.MyNumber" type="text" value="" />

当我调试并进入我的控制器时,“MyNumber”参数为空,即使我在它所代表的文本框中有文本。

我知道文本框中的名称必须与参数中的名称相同,并且我已经验证了这一点。

有什么想法吗?

【问题讨论】:

  • 请发布MyNumber 文本框生成的html 是什么样子的!
  • 刚刚添加了HTML代码。
  • 您使用的是哪个版本的 asp.net mvc?您可能遇到了这里解释的相同错误:stackoverflow.com/a/8376646/872395。您可以从 nuget 更新您的 jquery.validate.unobtrusive.js,也可以应用链接问题中的修复程序。
  • 据我所知,您有 CheckInformation.MyNumber,CheckInformation 是您的模型吗?我认为@nemesv 正在寻找您的视图的外观?我认为更详细的代码示例可能会有所帮助。
  • 我添加了查看代码

标签: asp.net-mvc data-annotations


【解决方案1】:

您的输入字段的生成名称似乎是:

name="CheckInformation.MyNumber"

这可能是因为您的视图模型是您在问题中显示的内容的父模型,并且您使用了以下内容:

@Html.TextBoxFor(x => x.CheckInformation.MyNumber)

因此,请确保您已指定此前缀,否则默认模型绑定器将永远无法重新水化这些值:

public ActionResult IsValidMyNumber([Bind(Prefix = "CheckInformation")] string myNumber)
{
    var test = services.ValidateMyNumber(myNumber);
    return Json(test, JsonRequestBehavior.AllowGet);
}

【讨论】:

  • 我尝试远程验证的字段位于部分页面中。并且该特定数据元素位于模型的子部分中。
  • 我已经添加了绑定但仍然没有发生。
  • 知道了!我不得不将前缀更改为“CheckInformation.myNumber”
【解决方案2】:

您还可以接收 myNumber 的值以在操作参数 Like 中传递您的视图模型。 它对我有用。

public ActionResult IsValidMyNumber(YourViewModel vm)
{
    var test = services.ValidateMyNumber(vm.myNumber);
    return Json(test, JsonRequestBehavior.AllowGet);
}

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多