c# - 从 MVC Controller 操作的 URL 中删除序列化模型

标签 c# asp.net-mvc asp.net-mvc-5

在我的 Home Controller 中是 Index() 操作。在 Index() 中,我使用当前经过身份验证的用户 ID 从数据库返回用户对象:

return View(db.Users.Find(User.UserId));

工作正常,URL 很简单:

https://localhost:44301/

但是,在 Home Controller 的其他地方,我在单独的操作中修改当前用户并将其传递回索引 View ,使用:

return RedirectToAction("Index", user);

当我这样做时,URL 会因用户模型的序列化版本而变得困惑:

https://localhost:44301/Home/Index/4?Name=katrina&Administrator=True&PasswordEncodedHash=1000%3AqzWR8U6poGKshxHDsP%2B5yFhz5AZ01%2Fv1%3ASqCG0SliIpjX0M0jjkQqAf5aunTVS2gx&Tests=System.Collections.Generic.List%601%5BLearningManagementSystem.Models.Test%5D&UserTestAttempts=System.Collections.Generic.List%601%5BLearningManagementSystem.Models.UserTestAttempt%5D&Phones=System.Collections.Generic.List%601%5BLearningManagementSystem.Models.Phone%5D

我想我在重定向操作的方式上做了一些愚蠢的事情,但是我不知道如何解决这个问题。我尝试添加自定义路线,但“?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/

相关文章:

c# - 我需要对这个功能进行单元测试吗?

c# - MVC 需要 TagHelper 使用 FluentValidation ASPNET Core

c# - 如何获取服务器域名

c# - IPagedList.MVC,设置总大小?

javascript - 为新实现的主题编辑 bundle 配置类

c# - 使用 Find() 还是 Single() 从数据库中选择项目更好?

javascript - 使用 javascript 启用和禁用复选框

c# - Unity容器解析无参数构造函数

c# - 逐步更新 ASP.NET MVC 中的模型

c# - 将工作应用程序发布到 Azure 时出现问题