Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc RemoteAttribute未将参数传递给操作?_Asp.net Mvc_Data Annotations - Fatal编程技术网

Asp.net mvc RemoteAttribute未将参数传递给操作?

Asp.net mvc RemoteAttribute未将参数传递给操作?,asp.net-mvc,data-annotations,Asp.net Mvc,Data Annotations,我尝试使用RemoteAttribute使用JSON验证数据元素服务器端。 我的数据字段是: [Display(Name = "My Number")] [Required] [Remote("IsValidMyNumber","Home",ErrorMessage="Bummer")] public string MyNumber { get; set; } name="CheckInformation.MyNumber" 我的控制器是: public Json

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

[Display(Name = "My Number")]
    [Required]
    [Remote("IsValidMyNumber","Home",ErrorMessage="Bummer")]
    public string MyNumber { get; set; }
name="CheckInformation.MyNumber"
我的控制器是:

  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>

@EditorFor(model=>model.CheckInformation.MyNumber)
@Html.ValidationMessageFor(model=>model.CheckInformation.MyNumber)
生成的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”参数为空,即使文本框中有此参数表示的文本

我知道文本框中的名称必须与参数中的名称相同,我已经对此进行了验证


有什么想法吗?

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

[Display(Name = "My Number")]
    [Required]
    [Remote("IsValidMyNumber","Home",ErrorMessage="Bummer")]
    public string MyNumber { get; set; }
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);
}

您还可以接收myNumber的值,以便在action参数中传递视图模型,如。 它对我有用

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

请发布
MyNumber
文本框中生成的html的外观!刚刚添加了HTML代码。您使用的是哪个版本的asp.net mvc?您可能遇到了此处解释的相同错误:。你可以从nuget更新你的
jquery.validate.unobtrusive.js
,也可以从链接的问题中应用修复程序。从我看到你有CheckInformation.MyNumber,CheckInformation是你的模型吗?我想@nemesv是在寻找你的观点?我认为更详细的代码示例可能是有益的。我添加了视图代码,我试图远程验证的字段位于部分页面中。那个特定的数据元素在模型的一个子部分。我添加了绑定,但仍然没有发生。明白了!我不得不把前缀改成“CheckInformation.myNumber”