3

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」パラメーターが null になります。

名前は、テキストボックスとパラメーターと同じでなければならないことを知っており、それを検証しました。

何か案は?

4

2 に答える 2

6

入力フィールドの生成された名前は次のようです。

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);
}
于 2013-08-07T20:40:16.403 に答える