【发布时间】:2018-08-22 15:41:32
【问题描述】:
我有一个视图模型类,它有一堆不同的路由参数作为它的属性。
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 分解为其路由部分。我返回的 URL 如下所示:
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 });
【问题讨论】:
标签: c# asp.net-core asp.net-core-mvc