0

ビューからモデルを受け取っています。
一部の値は自動的に入力されます。

ただし、次のように、必要な値の一部を手動で追加する必要があります。

[HttpPost]
public ActionResult Foobar(FooModel model, FormCollection collection)
{
    // "timePicker" is a dropdown list containing different times
    var time = collection["timePicker"].Split(':');
    model.Hours = int.Parse(time[0]);
    model.Minutes = int.Parse(time[1]);

    if (ModelState.IsValid)
    {
        ... // Do stuff
    }
}

だからここに問題があります:

ModelState.IsValidは偽です。私はそれをデバッグしましたが、とが割り当てられていない
と主張しています。...値を割り当て たばかりなので、これは正しくありません!model.Minutesmodel.Hours

の使用を検討しModelState.Clear()ましたが、残りのすべての情報が有効かどうかを手動で確認する必要はありません。

問題を解決する他の方法はありますか?

4

1 に答える 1

3

ModelStateさて、アクションに入る前に、エラーを に入れるモデルバインディングが行われました。

そのため、Hours と Minutes に値を追加する前に、ModelState にエラーMinutesとエラーがあります (無効になります)。Hours

次のようにして、これらのエラーを削除するだけです (すべてのエラーではClear()ありません)。

ModelState.Remove("Hours");
ModelState.Remove("Minutes");

これを解決する別の方法は、カスタム ModelBinder を作成 (および使用) することです。

于 2012-10-29T08:58:16.930 に答える