我有一个viewmodel类,该类具有许多不同的路由参数作为其属性。
public class FiltersVM
{
public string parmOne {get; set;}
public string parmTwo {get; set;}
public string parmThree {get; set;}
//etc
}
在我的控制器上,当我通过匹配的名称(例如:
)发送这些参数时,它们会正确使用这些参数<a asp-route-parmOne="Hello" asp-route-parmTwo="Dave" asp-action="Index">Link</a>
这是控制器的一个示例(一部分):
public async Task<IActionResult> Index(FiltersVM filtersVM, List<string> messages, string searchString)
{
//do something with filtersVM.parmOne etc <--This works
}
问题: 当我从一个动作转到另一个动作
public async Task<IActionResult> QuickTask(FiltersVM filtersVM, List<string> messages, string searchString)
{
//do something with filtersVM.parmOne etc <-- this works
Return RedirectToAction(nameof(Index), new { filtersVM});
}
这会将我发送回Index控制器,但不会将ViewMOdel分解为各个部分进行路由。我的网址返回如下:
https://localhost:44398/{ControllerName}?filtersVM=ProjectName.ViewModels.FiltersVM&{other route parameters not included in Viewmodel}
因此,第二个控制器正确地使用了VM参数来完成其工作,但是当它完成并尝试重定向时会出现问题。有什么想法吗?
我正试图避免创建这样的重定向。我没有尝试过,但是我敢打赌它会起作用,我有很多参数,所以这不是理想的选择:
Return RedirectToAction(nameof(Index), new { parmOne = filtersVM.parmOne, parmTwo = filtersVM.parmTwo, parmThree = filtersVM.parmThree });
答案 0 :(得分:1)
filtersVM
已经是一个对象,所以它只是
return RedirectToAction(nameof(Index),filtersVM);
它将正确地将模型的每个属性序列化为查询字符串。
但是请注意,该方法使用.ToString()
序列化属性-无法正确序列化复杂对象或集合的属性。