ASP.NET MVC RouteValueDictionary 和复杂对象

2024-01-01

在搜索结果页面中保留表单发布(视图模型)结果的最佳方法是什么?

我有一个包含复选框的搜索表单。该表单是使用如下视图模型构建的

public class SearchViewModel
{
    public string Name { get; set; }
    public string[] Colors { get; set; }
}

当此视图模型被发回时,我使用这些值来构建查询(使用 EF)。结果将转换为 PagedList。

    public class SearchController : Controller
    {
    public ActionResult Index()
    {
        //this displays the search form.
        return View();
    }

    public ActionResult Results(string game, SearchViewModel vm)
    {
        //this displays the results
        ViewBag.SearchViewModel = vm;
        var matches = _repository.AsQueryable()
            .ColorOr(vm.Colors)
            .WhereIf(vm.Name.IsNotEmpty(), x => x.Name.Contains(vm.Name.Trim()));

            return View(matches.ToPagedList(1, 10));
    }
}

现在结果已显示,我想使用 Html.PagedListPager 和 RouteValueDictionary 来创建分页。

@Html.PagedListPager((IPagedList)Model, page => Url.Action("Results", new RouteValueDictionary(ViewBag.SearchViewModel)))

然而;创建的 URL 如下所示:

http://localhost:5139/search?Name=test&Colors=System.String[]&PageIndex=0

颜色的值最终是类型而不是值。我希望 URL 看起来更像:

 http://localhost:5139/search?Name=test&Colors=[Blue,Pink,Yellow]&PageIndex=0
  1. 在搜索结果页面中保留表单发布(视图模型)结果的最佳方法是什么?
  2. RouteValueDictionary 可以支持复杂对象吗?
  3. 我应该使用类似的东西unbinder http://mhinze.com/2010/03/17/serializing-models-for-routevaluedictionary-and-later-model-binding/
  4. 使用 ViewData 还是 Session 会更好吗?

我对这样的情况所做的事情,我发现简单但功能强大,是将我的视图模型对象序列化为 JSON(在您的情况下SearchViewModel),使用类似的东西NewtonSoft JSON.net http://www.json.net然后使用生成的 JSON 字符串,通过以下方式对字符串进行简单压缩zlib.net http://nuget.org/packages/zlib.net Zlib.DeflateStream类(你也可以使用类似的东西AES Rijndael http://msdn.microsoft.com/en-us/library/system.security.cryptography.rijndael.aspx但毫无疑问会更慢,并且您首先需要的是速度),然后将生成的 Base64 字符串传递到您的 QueryString。

然后,当您准备再次使用它时(它实际上是一个视图状态),只需解压缩 JSON 字符串并将其从 JSON 反序列化到相应的 .NET 对象中(同样在您的情况下)SearchViewModel).

这对我来说是一种享受,并且您最终不会得到无法管理的 URL 或任何真正可衡量的性能影响,就像我在只有少数表单字段被序列化时所看到的那样。

我很快就会用代码示例来详细说明。

更新:代码示例...

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ASP.NET MVC RouteValueDictionary 和复杂对象 的相关文章

  • ASP.Net MVC 3、Ninject 和 Quartz.Net - 如何?

    我现在使用 Ninject 2 2 1 4 与我的 MVC3 一起使用 我成功配置了 Ninject 与它一起运行 但我不知道如何使 Ninject 在我的 MVC3 中与 Quartz Net 一起运行 有人可以帮忙吗 创建一个使用 Ni
  • 如何设置 web.config 文件以显示完整的错误消息

    我在 Windows Azure 上部署了 MVC 3 应用程序 但现在当我通过请求时staging url它告诉我 很抱歉 在执行您的要求时发生了一个错误 现在我想查看完整的错误消息 默认情况下由于某些安全原因它会隐藏该消息 我知道我们可
  • ASP.NET MVC 中是否有嵌套母版页?

    我想知道 MVC 框架是否可以利用嵌套母版页 如果是这样 有人有一些关于如何实现这一目标的信息吗 我们经常使用嵌套母版页 以便将布局与标准包含和站点范围标记分开 如下所示 站长
  • 将 MVVM 与 Knockout.js 结合使用时在服务器端定义模型

    我计划在客户端使用 knockout js 和 MVVM 模式来构建单页应用程序 因此模型 视图模型将在客户端定义 我对如何在服务器端构建感到困惑 现在 控制器会返回域模型本身吗 从域模型到 ViewModel 的所有映射仅发生在客户端吗
  • 单选按钮更改事件

    我有 2 个单选按钮 例如 ID 和名称
  • MVC 下拉列表未映射到模型

    我正在尝试使用 EF codefirst 在 MVC 3 中开发应用程序 当我使用 int 属性和约定来设置外键关系时 例如 public class Patient public int ConsultantId get set 然后 我
  • 为什么 DropDownListFor 无法识别编辑器模板中的选定值?

    我有以下名为 DropDown cshtml 的编辑器模板 这list部分工作正常 模板使用了一些我所做的巫毒来获得所需的SelectList from ViewData 控制器将视图模型中的所有选择列表放入ViewData 并且列表方面没
  • 尝试通过安全透明方法 xxx 访问安全关键 yy

    我刚刚开始学习 ASP NET MVC 并遵循 ASP NET MVC 教程 我正在使用 Visual Studio Express 2013 RC for Web 认为这可能是我的问题的原因 因为分页教程是使用 VS2012 编写的 一切
  • mvc 登录尝试失败后生成验证码

    所以我能够让我的验证码工作正常工作 但我的问题是 我想让它只在 3 次尝试后出现 我的一个选择是将用户重定向到一个已经有验证码的视图 重复登录 但带有验证码 然后让他通过该页面登录 还有其他选择吗 我觉得部分视图会导致页面发布出现问题 您认
  • MVC3 中的角色管理

    我想向应用程序添加一项功能 以便只有管理员才能创建用户 并且他可以向用户提供对特定页面的访问权限 他可以创建角色 可以为用户提供不同的角色 我正在使用 Visual Studio 2010 并在 MVC3 中构建此应用程序 请给我建议来弥补
  • ASP.NET MVC 控制器无法使用流内容正确返回 HttpResponseMessage

    正如标题所示 我没有让 MVC 控制器正确返回 HttpResponseMessage HttpGet AllowAnonymous public HttpResponseMessage GetDataAsJsonStream object
  • 在ConfigureServices中注入依赖

    在我的 ASP Net Core 应用程序中 我需要在以下位置注入一些依赖项 在我的例子中是一个存储库 ConfigureServices method 问题是该方法不允许使用多个参数来注入依赖项 该怎么办呢 这是我的代码 public v
  • 实体类型 ApplicationUser 不是当前上下文模型的一部分。在项目开始时使用了两个不同的数据库

    我使用实体框架创建了一个 MVC 4 应用程序来读取数据并将数据写入我在 Azure 数据库上托管的数据库 Azure 数据库应该保存应用程序数据和应用程序的登录数据 但是 当我第一次创建应用程序时 我忘记删除到本地计算机的连接字符串 因此
  • .net 4.7 中的依赖注入?

    我对 DI 有哪些集成选项有点困惑 我发现它对于 net core 对于我的特定项目 来说非常简单 但我不需要构建跨平台应用程序 也看不到使用 core 的优势 但是 net 框架应用程序似乎仍然使用 Global asax 设置且没有 S
  • C# SMTP 身份验证失败,但凭据正确

    这是我的问题 我编写了以下程序来测试是否可以发送电子邮件 class Program static void Main string args try Console WriteLine Mail To MailAddress to new
  • MVC RadiobuttonFor Razor 如何使标签可点击?

    我正在尝试用 razor 语法制作一个单选按钮列表 到目前为止我已经想出了这个 foreach var p in Model div class col lg 5 Html RadioButton name 1 false new onCL
  • 服务层设计。将事物放入服务层的原因

    我有一些与设计相关的问题 should service layer interfaces居住在一个domain layer 例如user service 将代码部分移动到单独层的主要原因是什么 should service layer居住在
  • asp.net mvc 4 - 可以在每个线程共享 DbContext 吗?

    From 每个 Web 请求一个 DbContext 为什么 https stackoverflow com questions 10585478 one dbcontext per web request why 我的理解是 DbCont
  • 带有 HttpContext 的 ASP.NET MVC 单元测试控制器

    我正在尝试为我的一个控制器编写一个单元测试 以验证视图是否正确返回 但该控制器有一个访问 HttpContext Current Session 的基本控制器 每次我创建控制器的新实例时 都会调用 basecontroller 构造函数 并
  • 将多个对象传递给我的控制器

    我将一个对象传递给我的控制器 如下所示 var form JSON stringify subRevisedRequest frmRevised val subSubcontractor frmSubcontractor val subDe

随机推荐

  • WPF加载序列化图像

    在应用程序中 我需要通过二进制编写器序列化图像 并将其获取到其他应用程序中以显示它 这是我的 序列化 代码的一部分 FileStream fs new FileStream file FileMode Create FileAccess W
  • 使用 ImageIO.read 时出现问题

    好的 我有一张正在尝试阅读的图像 问题是 Image read file 返回 NULL File file new File C images image1 jpg if file exists System out println Im
  • 如何设置“UILabel”的字符间距(紧排)和删除线样式?

    我需要为由 a 呈现的文本设置两个属性UILabel 字母之间的间距 kern 及其删除线样式 基于NSAttributedStringKey文档 我已经创建了以下扩展UILabel extension UILabel func setSt
  • WCF 使用匿名方法关闭连接

    在我们的项目中 我们使用以下代码进行 WCF 调用 In generated Proxy we have public static ICustomer Customer get ChannelFactory
  • ZF2 Form Hydration 具有多个对象和字段集

    我正在努力尝试弄清楚如何使用单个表单编辑多个模型 我有一个名为 Teams 的数据库表和一个与该表关联的条令实体 我创建一个表格如下 我的团队字段集 class TeamFieldset extends AbstractFieldset i
  • 我可以在 C++ 工厂中声明的同一行使用变量吗?

    我有一个多态的类层次结构 虽然我也支持标准工厂方法 即仅使用基类指针 但我还想要一个为我提供派生类的工厂机制 这并不容易 因为这些函数仅在返回类型上有所不同 这就是为什么我想到重载函数并让编译器选择正确的函数的原因 一个简单的应用是 我可以
  • F# 的情况如何? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 简单的 C Java 代码非常难以并行化 多线程等 因此 简单的 C Java 代码将使用越来越少的机器上的总处理能力 因为现在一切都将是多核的
  • 两个类之间的 ActionListener

    导入 javax swing 类标签扩展 JFrame JPanel pnl new JPanel ImageIcon duke new ImageIcon duke png JLabel lbl1 new JLabel duke JLab
  • 升级到 Google Play Services 9.0.0 后,应用程序在 DynamiteModulesC 中挂起

    通过这些更改和重新生成 将开发中的应用程序升级到 9 0 0google services json classpath com google gms google services 3 0 0 compile com google and
  • 如何在 VS Code 中正确集成 Cmder 2021 年 4 月?

    我想将 Cmder 集成到我的 Vscode 设置中 但在 2021 年 4 月的 vscode 更新中 命令 terminal integrated shell windows 和 terminal integrated shellArg
  • 强制 WPF TextBox 在 .NET 4.0 中不再工作

    在我的 WPF 应用程序中 我有一个文本框 用户可以在其中输入百分比 作为 int 介于 1 和 100 之间 Text 属性与 ViewModel 中的属性进行数据绑定 我在其中强制将值置于 setter 中的给定范围内 但是 在 NET
  • 在 Neo4J 中,当索引已存在时启动 CREATE INDEX ON

    如果您在已有此索引的 Neo4J 数据库上重播 CREATE INDEX ON 命令 会发生什么情况 Neo4J 是否会简单地忽略该命令 第一次执行它时 Neo4j 将 创建索引 创建一个后台作业来填充它 作为查询统计信息 告诉您索引已创建
  • 我可以取回 MySQL 表中列名的默认值吗? [复制]

    这个问题在这里已经有答案了 我可以获取表的列名称 但有没有办法检索每列的默认数据值 这是我用来获取表列名称的方法 q dbh gt query DESCRIBE tablename table fields q gt fetchAll PD
  • 错误:在 NDK 工具链文件夹中找不到 ABI 的工具链,前缀为:arm-linux-androideabi

    我对 Android Studio 真的很陌生 我正在快速移动并从我的代码中删除了一些内容 现在我不断收到错误消息并且我的 gradle 同步失败 我在日志中看到以下内容 2016 06 01 05 39 55 358 32778590 W
  • keydown 事件覆盖返回键在 Firefox 中不起作用

    我有以下简单的 javascript 代码 它处理返回键 我不想在文本框中按下返回键时提交表单 所有这些工作正常 但在 Firefox 中 如果我显示一条警报消息 那么它会停止工作并且开始提交表单 而没有警报消息的确切代码工作正常并停止提交
  • 如何计算可迭代对象中的非空元素数量?

    我正在为以下代码片段寻找更好 更 Pythonic 的解决方案 count sum 1 for e in iterable if e len list filter None iterable Using None作为谓词filter只是说
  • 使用 GDAL 和 Python 的最小距离算法

    我正在尝试实施最短距离算法使用 GDAL 和 Python 进行图像分类 计算样本区域的平均像素值并将其存储到数组列表 sample array 中后 我将图像读入名为 values 的数组中 使用以下代码循环遍历该数组 values va
  • WPF DataBinding 监视抛出的异常

    在我的模型中 我有很多不同对象的属性 我在设置对象值时检查该值 如果该值不被接受 我将抛出一个异常 这与 Windows 窗体 propertygrid 完美配合 但现在我正在尝试使用 WPF 设计新界面 在WPF中 当我将属性绑定到文本框
  • 在 Android 中,可以在相同的两个设备之间建立多个蓝牙连接吗?

    我有两台 Android 设备 一个充当服务器 另一个充当客户端 客户端连接到服务器并请求一个文件 这是在客户端上的一个线程和服务器上的一个线程中完成的 以便两者都可以继续做他们想做的事情 然后客户端尝试再次连接到服务器以请求另一个文件 现
  • ASP.NET MVC RouteValueDictionary 和复杂对象

    在搜索结果页面中保留表单发布 视图模型 结果的最佳方法是什么 我有一个包含复选框的搜索表单 该表单是使用如下视图模型构建的 public class SearchViewModel public string Name get set pu