C# 在RedirectToAction中传递ViewModel,导致ViewModel属性为空

C# 在RedirectToAction中传递ViewModel,导致ViewModel属性为空,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个需求,需要将ViewModel的同一个实例传递给控制器中的多个操作。我知道您可以使用下面的RedirectToAction执行此操作。ViewModel有一个名为ServiceTimes的属性(这是一个列表)。其中有一项,但是当输入myOnlineBookingStaff操作时,此处的ServiceTimes属性为空。为什么会这样 [HttpPost] public async Task<IActionResult> OnlineBookingServices(OnlineB

我有一个需求,需要将
ViewModel
的同一个实例传递给控制器中的多个操作。我知道您可以使用下面的
RedirectToAction
执行此操作。
ViewModel
有一个名为
ServiceTimes
的属性(这是一个列表)。其中有一项,但是当输入my
OnlineBookingStaff
操作时,此处的
ServiceTimes
属性为空。为什么会这样

[HttpPost]
public async Task<IActionResult> OnlineBookingServices(OnlineBookingViewModel viewModel)
{
    try
    {
        return RedirectToAction(nameof(OnlineBookingStaff), viewModel);
    }
}
[HttpPost]
公共异步任务OnlineBookingServices(OnlineBookingViewModel viewModel)
{
尝试
{
返回重定向到操作(名称(OnlineBookingStaff),viewModel);
}
}
操作如下所示:

public async Task<IActionResult> OnlineBookingStaff(OnlineBookingViewModel viewModel)
{
    try
    {
        return View(viewModel);
    }
    catch (Exception ex)
    {
        await ExceptionAsync("Problem displaying Staff, Please try again later.", ex, false, true);
        return View();
    }
}
公共异步任务OnlineBookingStaff(OnlineBookingViewModel视图模型)
{
尝试
{
返回视图(viewModel);
}
捕获(例外情况除外)
{
等待ExceptionAsync(“显示人员时出现问题,请稍后再试。”,例如,false,true);
返回视图();
}
}

RedirectToAction
发送HTTP 302响应并导致客户端重定向,这将最终导致访问url,从而丢失您的模型

您可以直接调用它:

[HttpPost]
public async Task<IActionResult> OnlineBookingServices(OnlineBookingViewModel viewModel)
{
    return await OnlineBookingStaff(viewModel);
}
[HttpPost]
公共异步任务OnlineBookingServices(OnlineBookingViewModel viewModel)
{
return wait OnlineBookingStaff(viewModel);
}

您能否共享
OnlineBookingViewModel
的代码?这些异常处理程序是否能够捕获并处理异常?这些似乎。。。对我来说是多余的。至于问题本身,
OnlineBookingViewModel
的结构是什么?来自服务器的HTTP重定向响应是什么时候?来自浏览器的HTTP请求是什么?您显示的代码可以正常工作,但前提是
OnlineBookingViewModel
仅包含简单属性。如果模型包含复杂对象或集合的属性,那么这些属性将为
null
(查看您创建的丑陋查询字符串以了解原因)。但无论如何,您都不应该这样做-您可能会超过查询字符串限制并抛出一个例外。这里值得注意的一点是,页面客户端的结果URL仍然是
OnlineBookingServices
,而不是
OnlineBookingStaff
。这可能会带来其他问题,也可能不会,这取决于问题范围之外的事情。这很有效,谢谢。然而,由于OnlineBookingStaff返回一个任务,我不得不添加一个如下的等待:return await OnlineBookingStaff(viewModel)@DavidBeaumont谢谢-我错过了这是不正确的
RedirectToAction()
使用基于模型的每个属性生成查询字符串。但是,如果模型包含复杂对象或集合的属性,它将生成不能绑定到该属性的“[someModel]”../OnlineBookingServices?someProperty=System.collections.Generic.List”。