在 ASP.NET MVC3 中将复杂对象作为参数发送到 Post Action

2023-12-05

我尝试发送一个参数submit按钮来发布操作,所以这是我的示例:

@using(Html.BeginForm(actionName: "Search", controllerName: "MyController", routeValues: new { rv = "102" })) {

   ...
  <input type="submit" value="Search" />
}

这是我的搜索操作:

[HttpPost]
public virtual ActionResult Search(string rv, FormCollection collection) {

 ...
}

所以到现在为止一切都很好,

然后我尝试发送一个复杂的对象,例如Dictionary<string, string>

所以你可以直接替换string类型rv参数与Dictionary<string, string>并发送一本字典,但在这种情况下rvvalue 总是返回一个计数为 0 的字典?哪里有问题?如何发送字典以进行操作?

Update

我也尝试过这个,但还没有工作(平均 rv Steel 是一本计数为 0 的字典):

@using(Html.BeginForm(actionName: "Search", controllerName: "MyController", routeValues: new { rv = Model.MyDictionary }, method: FormMethod.Post, htmlAttributes: new { @class = "FilterForm" })) {

 ...
}

[HttpPost]
public virtual ActionResult Search(Dictionary<string, string> rv, FormCollection collection) {

 ...
}

您无法发送复杂的对象。请阅读以下文章如果您希望能够将对象反序列化为集合或字典,则了解默认模型绑定程序所需的预期有线格式。

因此,在阅读 ScottHa 的文章并了解字典的预期传输格式后,您可以使用自定义扩展方法,按照约定将字典转换为 RouteValueDictionary:

public static class DictionaryExtensions
{
    public static RouteValueDictionary ToRouteValues(this IDictionary<string, string> dict)
    {
        var values = new RouteValueDictionary();
        int i = 0;
        foreach (var item in dict)
        {
            values[string.Format("[{0}].Key", i)] = item.Key;
            values[string.Format("[{0}].Value", i)] = item.Value;
            i++;
        }
        return values;
    }
}

然后在你看来你可以使用这个扩展方法:

@using(Html.BeginForm(
    actionName: "Search", 
    controllerName: "MyController", 
    routeValues: Model.MyDictionary.ToRouteValues(), 
    method: FormMethod.Post, 
    htmlAttributes: new RouteValueDictionary(new { @class = "FilterForm" }))
) 
{
    ...
}

显然这里我假设Model.MyDictionary is an IDictionary<string, string>财产。

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

在 ASP.NET MVC3 中将复杂对象作为参数发送到 Post Action 的相关文章

  • 当集合提交回控制器时,未将对象引用设置为对象的实例。错误

    我正在更新多条记录 单击提交按钮后出现错误 这表明控制器收到 NULL 并在第 36 行报告以下错误 下面是我的控制器 视图和模型的代码 你调用的对象是空的 描述 执行当前 Web 请求期间发生未处理的异常 请检查堆栈跟踪 有关该错误及其起
  • 无法将 MVC 4 部署到服务器

    我的 Web 应用程序只是一个用 VS 2010 MVC 4 制作的简单 Web 应用程序 没有任何外部代码 它只是 VS 2010 的默认应用程序 我有 Plesk 的豪华 Windows 托管 我从未更改过帐户中的任何功能 我将所有文件
  • 表单身份验证 MVC4

    我正在尝试使用 MVC4 网站进行简单的表单身份验证设置 在App start FilterConfig cs中 public static void RegisterGlobalFilters GlobalFilterCollection
  • 良好的 WiX 编辑器 [重复]

    这个问题在这里已经有答案了 我目前正在开发一个使用 WiX 创建 MSI 的项目 我过去在 Sourceforge 上使用 WiXEdit 来管理包含在 WiX 项目中的文件 因为它比直接操作 XML 稍微容易一些 但它仍然有点笨重 有谁知
  • Elmah 不会在 MVC 应用程序中记录 http post 请求的异常 - 如果请求包含 XML

    我在 MVC4 RC 应用程序中遇到了一个奇怪的问题 在 NET 4 0上运行 我刚刚设置 Elmah 来记录异常 错误 我基本上安装了埃尔玛MVC and elmah sqlserverNuGet 包 分别为2 0 0和1 2版本 它似乎
  • 挂钩 jQuery 验证消息更改

    我想在工具提示中显示 jQuery 验证消息 为了实现这一目标 我首先将以下 CSS 规则添加到我的样式表中 fieldset field validation error display none fieldset field valid
  • 从 MVC 控制器调用 Web API

    我的 MVC 5 项目解决方案中有一个 Web API 控制器 WebAPI 有一个方法可以将特定文件夹中的所有文件作为 Json 列表返回 name file1 zip path c 从我的 HomeController 我想调用这个方法
  • 从另一台设备访问 Azure 模拟器

    我有两个不同的项目 Windows Phone 8 应用程序 我正在真实的物理开发设备上运行 Azure 云服务 其中包含一个简单的 WebRole 端点 其中包含 ASP NET MVC WebAPI 我的目标很简单 使用从真实设备运行的
  • 如何从 asp.net MVC 4 应用程序中的 FileResult 方法返回错误消息?

    我在 asp net mvc4 中有一个 fileresult 方法 它返回 Excel 文件中的报告 现在 如果不满足我的条件 我如何从该方法返回错误消息 既然我们只能从这个方法返回一个文件 谢谢 您可以将操作方法 的签名更改为publi
  • 混合 ASP.NET WebForms 和 MVC 授权

    我正在尝试将一些 MVC3 功能混合到现有的 WebForms 应用程序中 我遵循了一些指南 除了授权部分之外 一切都已设置完毕并正常工作 现有的应用程序有
  • 从 MVC 控制器操作调用 javascript

    我可以调用 javascript 函数吗MVC 控制器动作 不是来自视图页面 并获取返回值 如何 我需要向服务器发出请求来自代码 cs 像这里一样使用 javascript 但这是aspx页面 function getInitData va
  • 如何在 MVC3 Razor 视图中呈现数据表

    我在 xls 电子表格 1 之间有一个可靠且经过测试的导入方法 该方法返回DataTable 我已将其定位在我的服务层中 而不是数据中 因为只有工作簿作为上传文件保存 但现在我想知道在哪里以及如何生成此内容的 HTML 表示形式DataTa
  • 单元测试:创建“模拟”请求来模拟 MVC 页面请求

    如何为我的 asp net mvc 应用程序创建模拟请求以进行单元测试 我有什么选择 我在我的操作中使用 FormsCollection 因此我也可以模拟表单输入数据 您只需创建 FormCollection 的新实例并在其中添加数据即可
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • 使用 Newtonsoft 和 C# 反序列化嵌套 JSON

    我正在尝试解析来自 Rest API 的 Json 响应 我可以获得很好的响应并创建了一些类模型 我正在使用 Newtonsoft 的 Json Net 我的响应中不断收到空值 并且不确定我的模型设置是否正确或缺少某些内容 例如 我想要获取
  • Signal R Native Android 应用程序协商失败

    我正在尝试创建一个可以连接到我的基本 SignalR Hub 的 Android 应用程序 它只是一个基本的集线器文件 我想用它来测试一些东西 但到目前为止我还没有运气 有人可以看看我做错的事情吗 每次我尝试运行它时 我都会收到以下堆栈竞赛
  • 如何在asp mvc的视图中加载选定的partialview?

    我正在从事 ASP NET Mvc 项目 我有一个类似于图像的视图 在此输入图像描述 https i stack imgur com xI6Fa jpg 我在布局中设计了右侧面板 我的布局代码 div class col md 3 pane
  • 处理 MVC 中的创建和修改日期

    你好 我有一个 MVC 应用程序 它有 CreatedDate 和 ModifiedDate 字段 1 CreatedDate是用户创建模块的时间 任何条目 2 ModifiedDate是用户编辑模块的时间 我有以下模型类 namespac
  • Razor 语法在 UI 标记方面是否提供了令人信服的优势?

    我注意到斯科特 格思里开始提及剃须刀 http weblogs asp net scottgu archive 2010 07 02 introducing razor aspx a fair bit http weblogs asp ne
  • 检测到 ASP.NET 网页版本冲突:指定版本为“1.0.0.0”,但 ASP.MET MVC 3 中 bin 中的版本为“2.0.0.0”

    安装 microsoft web helper 后出现以下错误 检测到 ASP NET 网页版本冲突 指定版本为 1 0 0 0 但 bin 中的版本为 2 0 0 0 要继续 请从应用程序的 bin 目录中删除文件或删除 web conf

随机推荐

  • NSStatusBar + Swift:标题显示并立即消失

    我想为 macOS 制作状态栏 但运行应用程序后标题显示并立即消失 func applicationDidFinishLaunching aNotification Notification Insert code here to init
  • 以编程方式与 IE 浏览器交互以填写表单和导航等

    我想使用 C 与 IE 浏览器交互 我感觉会涉及到shdocvw dll 但是里面的类太多了 我不知道从哪里开始 也许根本没有必要使用它 这里的目标是与网站交互 访问其页面并 预热 与如此处所述 by 肯尼斯 斯科特 问题是 当您与网站交互
  • 在 ADF 管道中将文件 blob 存储的访问层从热层更改为存档层

    我想使用 ADF 管道将文件从一个容器复制到另一个容器 在复制时我必须将访问层从热层更改为存档层 我必须使用 ADF 管道来实现这一点 帮助我找到一种不使用自定义活动的方法会很棒 我没有在任何活动中看到实现此目的的直接属性 您可以尝试下面的
  • 为什么我的烧瓶表单验证返回不是有效的选择?

    我一直试图找出为什么我的 Flask 表单无法正确验证我的选择字段选择 即使这些选择来自选择字段选项 我的假设是 从服务器传回时的选择选项是 unicode 并且正在与作为字符串的选择进行比较 但是 我认为 coerce str 可以解决这
  • 为什么自动变量如果不设置就会包含垃圾?

    在 C 编程语言 第三版和第 32 页中 我看到了一些让我感到困惑的行 因为自动变量随着函数调用而出现和消失 所以它们 从一次调用到下一次调用 不保留它们的值 并且必须 在每个条目上明确设置 如果未设置 它们将包含 垃圾 是不是说对于下面的
  • sys.argv 在 python PyQt4 中的用途是什么

    在编程方面我还是个初学者 尤其在 GUI 编程方面我还是个新手 我正在使用 python 和 PyQt4 并且正在遵循教程指南 下面的代码块相对容易理解 import sys from PyQt4 import QtGui def wind
  • 使用 Swashbuckle.AspNetCore 设置 Swagger UI 的 syntaxHighlight 属性

    我正在一个项目中使用 Swashbuckle AspNetCore 我开始使用的版本是5 5 1当渲染大型主体 20k json 行 的结果时 速度非常合理 数据获取需要 50 毫秒 渲染需要不到一秒 当我升级到5 6 x 语法现在突出显示
  • 显示图像列表时应用程序小部件问题

    我浏览了以下 android 文档 带有集合的应用程序小部件 来创建一个显示文本列表的小部件 一切工作正常 并且正如我所希望的那样工作 现在 我想显示存储在 SD 卡中的图像列表 而不是显示文本列表 那么如何在我已经实现的代码中完成这一点呢
  • 从 C# 中的 vbscript 函数返回一个值

    我正在 C 代码中执行 vbs 文件 以检查用户的真实性 我正在传递用户名和密码值 登录时单击 vbs 将运行并对用户进行身份验证 如果用户不真实 则 vbs 中的函数返回一个值 我如何在 C 代码中获取该值并使用它在应用程序的 UI 中显
  • GWT 2.6 编译时出现 GXT-3.0.1 错误

    自从 GWT 2 6 0 版本放弃了对 ie6 浏览器的支持以来 我当前也使用 GXT 的项目无法编译并出现以下错误 Loading inherited module com sencha gxt ui GXT Loading inheri
  • 如何在 python 脚本中从 shell 脚本返回值

    我有一个 python 脚本 需要来自 shell 脚本的值 以下是 shell 脚本 a sh bin bash return value value some unix command echo value return value 以
  • mysql 哪里匹配

    我的 mysql 和 MATCH AGAINST 出现问题 我的数据库中有这一行 1 Czy jeste my tutaj sami 2 Margit Sanoemo 我想通过以下查询找到它 SELECT FROM data WHERE M
  • 具有意图过滤器的广播接收器?

    她就是我想要实现的目标 当用户尝试从任何应用程序共享某些文本 例如共享推文或链接 时 我的应用程序将出现在共享列表中 如果他选择我的应用程序 将会运行一些简单的代码 例如显示 Toast 就这样 不需要界面或用户界面 我是这样做的 Andr
  • 将静态 boost 构建链接到 VS2012 和 Win32/64 下的静态库

    我正在尝试构建一个静态库作为网络设备的 API 发布 我可以成功编译并链接该库以生成 lib 输出文件 并将它们重新定位到目录结构中 如下所示 EyeLib L Include L PublicInterface h L Lib L deb
  • Android Studio 未启动,无法创建子事件循环,无法锁定系统文件夹

    Android Studio 未启动 无法创建子事件循环 无法锁定系统文件夹 java lang IllegalStateException 无法创建子事件循环 在 io netty util concurrent MultithreadE
  • Javascript GeoLocation 无法在 Chrome 上运行

    我正在尝试获取用户的地理位置 然后进行查询 在 Mozilla Firefox 中它在 Safari 中也可以正常工作 但在 Chrome 中它根本不起作用 window onload function if navigator geolo
  • 有没有办法将当前时间戳添加到 Google Data Studio 报告中?

    我创建了一份简单的报告来跟踪为我们小学筹集的资金 只是一个饼图 从财务主管维护的 Google 表格中选取数据 现在有一个请求在屏幕上添加时间戳 该报告正在通过截图并在各个社交媒体平台上分享来报告进度 经过一番谷歌搜索后 我找不到返回当前时
  • Camel发送多部分/表单数据请求

    我有一个应用程序 它发送多部分 表单数据和一个接收多部分 表单数据请求的应用程序 接收器中的处理 InputStreamCache postBody exchange getIn getBody InputStreamCache class
  • Dojo 1.9:Dijit:禁用使用商店填充的 dijit/Form/FilteringSelect 中的选项项

    我正在尝试禁用 dijit Form FilteringSelect 控件中的选项项 该控件使用store 遵循本指南 http dojotoolkit org documentation tutorials 1 9 selects usi
  • 在 ASP.NET MVC3 中将复杂对象作为参数发送到 Post Action

    我尝试发送一个参数submit按钮来发布操作 所以这是我的示例 using Html BeginForm actionName Search controllerName MyController routeValues new rv 10