1

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

次のようなページに移動します。

/Auction/Details/37

これにより、このアクションメソッドが呼び出されます。

public ActionResult Details(int id)

このメソッドの特定の行は次のとおりです。

return View("DetailsLub", auction);

このビューには次の行が含まれています。

@Html.Action("BidOnAuction", new { auctionId = Model.Id })

このアクションメソッドを呼び出すもの:

public PartialViewResult BidOnAuction(int auctionId)

ここまでは順調ですね?

これで、BidOnAuctionビューにフォームがあり、ボタンがあります。このボタンをクリックすると、次のアクションメソッドが呼び出されます。

[HttpPost]
public ActionResult BidOnAuction(BidOnAuctionViewModel model)

このアクションメソッドには、次の行を含むcatchステートメントがあります。

ModelState.AddModelError(string.Empty, operation + @" Failure: " + message);
return RedirectToAction("Details", new { id = model.AuctionId });

これで、DetailsLUBビューとBidOnActionビューの両方に次の行が含まれます。

@ Html.ValidationSummary(true)

しかし、問題は、画面に何も印刷されないことです。私は何が間違っているのですか?

4

3 に答える 3

2

ページで検証メッセージを取得するには、モデルを含むビューを返す必要があります。モデルにはモデルの状態が含まれているため、次のようになります。

return View(Model);

BidOnAuctionこれにより、検証の概要を含むモデルが返されます。

于 2012-01-24T12:47:05.077 に答える
1

新しいアクションにリダイレクトして、モデル状態が存在することを期待することはできません。

modelState が無効な場合は (View(model) を使用して) 返すだけで、それ以外の場合は詳細にリダイレクトされます。

詳細ビューでエラー情報が必要な場合は、それを TempData に追加するか、オプションのパラメーターとして渡します。

于 2012-01-24T12:58:31.283 に答える
1

このコード行

return RedirectToAction("Details", new { id = model.AuctionId });

RedirectResultクラスのインスタンスを返します。これは通常、リダイレクトに使用され、ビューをレンダリングしません。を使用して子アクションを親ビューにレンダリングする場合は@Html.Action、RedirectResult ではなく、その子アクションからビューを返す必要があります。また、子アクションがない場合でも、その RedirectResult は機能しません。RedirectResult を返すと、ブラウザはそのアクションに対してすべて新しいリクエストを新たに発行します。とにかくモデルの状態は失われます。次のようなことをする必要があります

try
{
    //some actions
    return RedirectResult("Details", new { id = model.AuctionId });
}
catch
{
    ModelState.AddModelError(string.Empty, operation + @" Failure: " + message);
    return View("Details", new { id = model.AuctionId });
}
于 2012-01-24T12:47:29.040 に答える