在我的 Home Controller 中是 Index()
操作。在 Index()
中,我使用当前经过身份验证的用户 ID 从数据库返回用户对象:
return View(db.Users.Find(User.UserId));
工作正常,URL 很简单:
但是,在 Home Controller 的其他地方,我在单独的操作中修改当前用户并将其传递回索引 View ,使用:
return RedirectToAction("Index", user);
当我这样做时,URL 会因用户模型的序列化版本而变得困惑:
我想我在重定向操作的方式上做了一些愚蠢的事情,但是我不知道如何解决这个问题。我尝试添加自定义路线,但“?Name=....”仍然附加到该路线上。
(编辑)其他操作的代码:
public ActionResult ToggleAdministrator()
{
if (Request.IsAuthenticated)
{
var user = db.Users.Find(User.UserId);
user.Administrator = !user.Administrator;
db.SaveChanges();
Response.Cookies.Add(cookie);
return RedirectToAction("Index", user);
}
return RedirectToAction("Index", (User)null);
}
最佳答案
我认为您不需要在使用 RedirectToAction
重定向到某些操作时传递整个数据。
假设您在 Home Controller
中有一个操作 Index
。
Public ActionResult Index(int id)
{
-- write the code here to fetch data based on that id
-- like
var user = db.Users.FirstOrDefault(x=>x.Id = id);
return View(user);
}
现在,您只需使用重定向到操作,如下所示:
return RedirectToAction("Index", new { Id= 5 });
注意:
- 切勿在 QueryString 或 GET 请求中传递复杂类型对象
关于c# - 从 MVC Controller 操作的 URL 中删除序列化模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30985749/