1

重複の可能性:
アクションから別のアクションにデータを渡す

フォームを送信し、結果に応じてアクションにリダイレクトしたいという見方があります。アクションに対応するビューは強く型付けされており、ResultsViewModelを受け入れる必要があります。

T4MVCを使用してResultsViewModelを渡そうとしています。

以下はコードです:

    [HttpPost]
    public virtual ActionResult AddEntity(string viewModel)
    {
        //Deserialize using Json.NET
        var entity = JsonConvert.DeserializeObject<MyEntity>(viewModel);

        var success = DoSomething(); //returns boolean
        if(success)
        {
            var result = new ResultsViewModel { MyEntity = entity, MessageId = 1};
            return RedirectToAction(MVC.MyController.ResultsPage(result));
        }

        var result = new ResultsViewModel { MyEntity = entity, MessageId = 2};
        return RedirectToAction(MVC.MyController.ResultsPage(result));
    }

    public virtual ActionResult ResultsPage(ResultsViewModel viewModel)
    {
        return View(viewModel);
    }

コードが到達したとき

    public virtual ActionResult ResultsPage(ResultsViewModel viewModel)
    {
        return View(viewModel);
    }

viewModelは常にnullに等しくなります。

私はこのようなことができることを知っています:

return RedirectToAction("ResultsPage", new { viewModel = result });

編集:私はreturn RedirectToAction( "ResultsPage"、new {viewModel = result});を試しました。また、viewModelでnullを取得しています。

ただし、T4MVCを使用してオブジェクトを渡す理由/方法を理解しようとしています。

ありがとう、

4

1 に答える 1

5

使用するTempData

[HttpPost]
public virtual ActionResult AddEntity(string viewModel)
{
    //Deserialize using Json.NET
    var entity = JsonConvert.DeserializeObject<MyEntity>(viewModel);

    var success = DoSomething(); //returns boolean
    if(success)
    {
        var result = new ResultsViewModel { MyEntity = entity, MessageId = 1};
        return RedirectToAction(MVC.MyController.ResultsPage(result));
    }

    var result = new ResultsViewModel { MyEntity = entity, MessageId = 2};

    TempData["Result"] = result;


    return RedirectToAction(MVC.MyController.ResultsPage(result));
}

public virtual ActionResult ResultsPage()
{
    ResultsViewModel model = (ResultsViewModel)TempData["Result"];
    return View(model);
}
于 2012-06-20T01:29:48.160 に答える