2

私はこの問題を抱えています:

2 つの属性の合計が 100 を超えることができないモデルを検証しています。このために、次のように使用しています。

私のモデルでは、これらは私の属性です:

[Remote("ValidatePrevTextWidth", "Validation", AdditionalFields = "TextboxWidth")]
    public int PrevTextWidth { get; set; }

[Remote("ValidateTextboxWidth", "Validation", AdditionalFields = "PrevTextWidth")]
    public int TextboxWidth { get; set; }

私の ValidationController は次のとおりです。

public JsonResult ValidatePrevTextWidth(int PrevTextWidth, int TextboxWidth)
    {
        bool valid = AreValid(PrevTextWidth, TextboxWidth);
        return Json(valido, JsonRequestBehavior.AllowGet);
    }

public JsonResult ValidateTextboxWidth(int TextboxWidth, int PrevTextWidth)
    {            
        bool valid = AreValid(PrevTextWidth, TextboxWidth);
        return Json(valido, JsonRequestBehavior.AllowGet);
    }

private bool AreValid(int prevTextWidth, int textboxWidth)
    {
        return (prevTextWidth + textboxWidth)<=100;
    }

私の見解は次のとおりです。

@using (Html.BeginForm("Index", "Pregunta", FormMethod.Post, new { id = "frmNewPreguntaDesign" }))
{ @Html.TextBoxFor(m => m.PrevTextWidth) 
  @Html.TextBoxFor(m => m.TextboxWidth)
}

それはうまくいきます。問題は次のとおりです。ユーザーによって挿入された が でありprevTextWidth、ユーザーが55に挿入46するとします。textboxWidthここでは、 で検証が失敗し、textboxWidth強調表示されます。

しかし、ユーザーが prevTextWidth の値を 54 に変更するとどうなるでしょうか? 検証はt fail, but thetextboxWidth will continue to be highlighted and not valid. The only way to make it valid is to re-insert the value oftextboxWidth` を獲得しました。

2 つの属性を同時に検証し、2 番目の値を再挿入して有効にしない方法はありますか?

前もって感謝します、

マティアス

4

1 に答える 1

0

残念ながら、リモートバリデーターは追加フィールドを使用してそのフィールドの値を取得するだけです。追加フィールドが変更されても検証はトリガーされません。JQuery EqualTo (MVC の CompareAttribute) は同じことを行います。

あなたが望むものを達成する1つの方法は、追加のフィールドが変更されたときに最初のフィールドを検証するために少しのjavascriptを書くことです.

 $('#PrevTextWidth').change(function () {
    $('#TextboxWidth').valid();
});
于 2011-11-10T09:43:46.527 に答える