我有一个form
用于过滤的普通多选列表框。
因此,按照标准设计,我将过滤器作为 GET 操作进行。所以表单提交会产生一个完全可以接受的 URL:
http://example.com/Matrix?role=1&role=6&role=2
roles
这与论点完美结合:
[HttpGet]
public virtual ViewResult Matrix(List<int> roles) { ... }
现在返回的过滤视图包含一个需要post
编辑到服务器的表单,因为它包含在CustomViewModel
. 表单再次发布到相同的 URL,并且绑定完美:
[HttpPost]
public virtual ActionResult Matrix(CustomViewModel vm, List<int> roles)
{
...
//Passing the list 'roles' untouched directly to the redirect
//Problem sirens set off!!
return RedirectToAction(MVC.T4Path.To.Matrix(roles));
}
尝试执行重定向时会出现问题。现在从逻辑上讲,它似乎是一个直接的重定向,roles
并作为保留过滤器的参数传递。但生成的 GET 请求是:
http://example.com/Matrix?roleSelector=System.Collections.Generic.List%601%5BSystem.Int32%5D
为什么会这样?我该怎么做才能使生成的 URL 与漂亮的 URL 相似?
我目前正在使用的解决方法是使用 将数据传回TempData
,但这会导致数据从 URL 中消失,尽管保留了过滤器,但表单本身是空的/重置。