1

検証の目的で、ModelState を同じコントローラー内のあるアクションから別のアクションに渡そうとしているだけです。ただし、モデルの状態は更新されません。TempData["____MvcContrib_ValidationFailures____"] には、転送アクションからの ModelStateDictionary が含まれていることがわかりますが、これは現在の ModelState に自動的に転送されるはずだと思いましたか? どこが間違っていますか?

ASP.NET MVC2 と MVCContrib 2.0.36.0 を使用しています。この属性で Controller を装飾することも試みましたが、結果は同じです。

コード:

[HttpGet]
[ModelStateToTempData]
public ActionResult NewsEventsSignup()
{
    var newsEventsSignupDetails = this.TempData.GetItem<NewsEventsSignupDetails>();

    var viewModel = _newsEventsSignupPageViewModelMapper.MapFrom(newsEventsSignupDetails);

    return this.View(viewModel);
}

[HttpPost]
[ModelStateToTempData]
[ValidateAntiForgeryToken]
public ActionResult NewsEventsSignup(NewsEventsSignupFormViewModel newsEventsSignup)
{
    ActionResult resultToReturn;

    var newsEventsSignupDetails = _newsEventsSignupDetailsMapper.MapFrom(newsEventsSignup);

    try
    {
        _newsEventsSignupTasks.SignupForNewsAndEvents(newsEventsSignupDetails);
        resultToReturn = this.RedirectToAction(x => x.Index());
    }
    catch (RulesException e)
    {
        e.AddModelStateErrors(this.ModelState); // from xVal
        this.TempData.AddItem(newsEventsSignupDetails); // for showing invalid input
        resultToReturn = this.RedirectToAction(x => x.NewsEventsSignup());
    }

    return resultToReturn;
}
4

1 に答える 1

1

ModelState が満たされていないことをどのように確認しますか? これは OnActionExecuted フィルターであるため、アクションが終了したときにのみ満たされます。アクションで値を確認することはできません。

ModelState に実際にエラーがあることを検証する最も簡単な方法は、ビューに検証の概要を表示することです。

あなたのエラーがxvalに関連していないことを確認するには、試してみます

ModelState.AddModelError("TestError", "This is an errortest");

リダイレクトする前に NewsEventsSignup で。

また、デバッガーまたは一部のデバッグ コードで TempData にアクセスしようとしないでください。最初にアクセスすると削除されます。

于 2010-06-21T20:09:05.623 に答える