簡體   English   中英

作為另一個動作的結果返回動作

[英]Return Action as result of another action

當我嘗試從另一個Action返回一個Action時,我遇到了一個問題。 我有這樣的事情:

public ActionResult Action (int param1, string param2)
{
    ActionViewModel vm = new ActionViewModel();
    vm.Param1Prop = param1;
    vm.Param2Prop = param2;

    return View(vm);
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Action (ActionViewModel vm)
{
    //Do Something...

    if (vm.DoItAgain)
    {
        return Action(vm.Param1Prop-1, vm.Param2Prop);
    }

    return View(vm);
}

當行return Action(vm.Param1Prop-1, vm.ParamProp); 轉到Action(int param1, string param2) ,執行,一切看起來都很順利。 但不要。 渲染結果看起來像return View(vm)代替執行,則所有的值vm是作為sended中郵行動,而不是那些我正經過同一return Action(vm.Param1Prop-1, vm.ParamProp);

我不確定為什么不工作,ActionResult返回被忽略了? 第一個Action方法中的代碼執行正常(我調試並在其中放入一個日志來檢查它),第一個方法的返回是響應的結束,那么為什么看起來這條線從未發生過呢? 我還嘗試修改PostAction上的vm以查看vm是否以某種方式被感染。 這也不起作用。 為了做到這一點,我放了一個RedirectToAction而不是使用返回Action: RedirectToAction("Action", new { param1 = vm.Param1Prop-1, param2 = vm.Param2Prop }); 一切正常 我完全理解為什么RedirectToAction工作,但我無法弄清楚為什么調用Action方法不行。 任何人都可以啟發我嗎?

您可能看到的是原始POST中的ModelState值。 這些將優先於您返回視圖的那些。 您可以通過清除ModelState的值來解決此問題。 但是,你不應該這樣做。

你不應該從另一個回復一個動作。 您應該返回該操作的重定向

return RedirectToAction("Action",
       new { param1 = vm.Param1Prop-1, param2 = vm.Param2Prop });

因為您現在已經執行了正確的重定向,而不是直接從POST返回GET操作的結果,所以當原始請求結束並且您將看不到舊的發布值時, ModelState將被清除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM