向控制器提交多次调用的相同 Partial View 数据?

2023-11-26

我在我的视图中添加了一个按钮。单击此按钮后,将添加部分视图。在我的表单中,我可以添加尽可能多的部分视图。提交此表单数据时,我无法将所有部分视图数据发送到控制器。 我制作了一个具有所有属性的不同模型,并且我已将该模型的列表添加到我的主模型中。谁能给我一些技巧,以便我可以将所有部分视图内容发送到我的控制器?

在我看来

<div id="CSQGroup">   
</div>
<div>
  <input type="button" value="Add Field" id="addField" onclick="addFieldss()" />
</div>

function addFieldss()
{    
  $.ajax({
    url: '@Url.Content("~/AdminProduct/GetColorSizeQty")',
    type: 'GET',
    success:function(result) {
      var newDiv = $(document.createElement("div")).attr("id", 'CSQ' + myCounter);  
      newDiv.html(result);
      newDiv.appendTo("#CSQGroup");
      myCounter++;
    },
    error: function(result) {
      alert("Failure");
    }
  });
}

在我的控制器中

public ActionResult GetColorSizeQty()
{
  var data = new AdminProductDetailModel();
  data.colorList = commonCore.getallTypeofList("color");
  data.sizeList = commonCore.getallTypeofList("size");
  return PartialView(data);
}

[HttpPost]
public ActionResult AddDetail(AdminProductDetailModel model)
{
  ....
}

在我的片面观点中

@model IKLE.Model.ProductModel.AdminProductDetailModel
<div class="editor-field">
  @Html.LabelFor(model => model.fkConfigChoiceCategorySizeId)
  @Html.DropDownListFor(model => model.fkConfigChoiceCategorySizeId, Model.sizeList, "--Select Size--")
  @Html.ValidationMessageFor(model => model.fkConfigChoiceCategorySizeId)
</div>
<div class="editor-field">
  @Html.LabelFor(model => model.fkConfigChoiceCategoryColorId)
  @Html.DropDownListFor(model => model.fkConfigChoiceCategoryColorId, Model.colorList, "--Select Color--")
  @Html.ValidationMessageFor(model => model.fkConfigChoiceCategoryColorId)
</div>   
<div class="editor-field">
  @Html.LabelFor(model => model.productTotalQuantity)
  @Html.TextBoxFor(model => model.productTotalQuantity)
  @Html.ValidationMessageFor(model => model.productTotalQuantity)
</div>

你的问题是部分基于单个渲染htmlAdminProductDetailModel对象,但您正在尝试回发集合。当您动态添加新对象时,您会继续添加看起来像这样的重复控件<input name="productTotalQuantity" ..>(这也会创建无效的 html,因为重复的id属性)在需要的地方<input name="[0].productTotalQuantity" ..>, <input name="[1].productTotalQuantity" ..>等等,以便在回发时绑定到集合。

The DefaultModelBinder要求集合项的索引器从零开始并且是连续的,或者表单值包含Index=someValue索引器在哪里someValue(例如<input name="[ABC].productTotalQuantity" ..><input name="Index" value="ABC">。 Phil Haack 的文章对此进行了详细解释模型绑定到列表。使用索引方法通常更好,因为它还允许您从列表中删除项目(否则有必要重命名所有现有控件,以便索引器是连续的)。

解决您的问题的两种可能的方法。

Option 1

Use the 开始项目集合您的部分视图的帮手。这个助手将为Index基于 GUID 的值。您在局部视图和渲染现有项目的循环中都需要它。你的部分看起来像

@model IKLE.Model.ProductModel.AdminProductDetailModel
@using(Html.BeginCollectionItem()) 
{
  <div class="editor-field">
    @Html.LabelFor(model => model.fkConfigChoiceCategorySizeId)
    @Html.DropDownListFor(model => model.fkConfigChoiceCategorySizeId, Model.sizeList, "--Select Size--")
    @Html.ValidationMessageFor(model => model.fkConfigChoiceCategorySizeId)
  </div>
  ....
}

Option 2

使用“假”索引器手动创建表示新对象的 html 元素,将它们放置在隐藏容器中,然后在“添加”按钮事件中克隆 html,更新索引器和索引值并将克隆的元素附加到 DOM。为了确保 html 正确,请在 a 中创建一个默认对象for循环并检查它生成的 html。这种方法的一个例子显示在这个答案

<div id="newItem" style="display:none">

  <div class="editor-field">
    <label for="_#__productTotalQuantity">Quantity</label>
    <input type="text" id="_#__productTotalQuantity" name="[#].productTotalQuantity" value />
    ....
  </div>
  // more properties of your model
</div>

请注意,使用“假”索引器来防止回发时绑定该索引器(“#”和“%”不会匹配,因此它们会被DefaultModelBinder)

$('#addField').click(function() {
  var index = (new Date()).getTime(); 
  var clone = $('#NewItem').clone();
  // Update the indexer and Index value of the clone
  clone.html($(clone).html().replace(/\[#\]/g, '[' + index + ']'));
  clone.html($(clone).html().replace(/"%"/g, '"' + index  + '"'));
  $('#yourContainer').append(clone.html());
}

选项 1 的优点是您可以在模型中强类型化视图,但这意味着每次添加新项目时都会调用服务器。选项 2 的优点是它全部在客户端完成,但是如果您对模型进行任何更改(例如向属性添加验证属性),那么您还需要手动更新 html,这使得维护变得更加困难。

最后,如果您使用客户端验证(jquery-validate-unobtrusive.js),那么每次向 DOM 添加新元素时都需要重新解析验证器,如下所述这个答案.

$('form').data('validator', null);
$.validator.unobtrusive.parse($('form'));

当然,您需要更改 POST 方法以接受集合

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

向控制器提交多次调用的相同 Partial View 数据? 的相关文章

  • MVC4 输入字段占位符

    Does MVC4默认支持placeholders对于生成的输入字段 我没有找到任何东西 所以我正在尝试实现我自己的 但不幸的是Prompt E Mail 没有传递到ViewData ModelMetadata Watermark同时产生控
  • ServerManager 构造函数在测试环境中崩溃

    我正在 MVC 4 中构建一个控制应用程序 遇到了一个非常烦人的问题 当我在本地调试项目时 它工作正常 但是 当我将项目部署到测试服务器 Windows Server 2008 R2 时 出现以下换行符 ServerManager mana
  • $http post 未与 asp.net MVC 模型绑定

    为什么 angularjs http post 的有效负载没有绑定到输入模型 当调用该操作时 模型为空 并且 request params 和 request forms 不显示发送表单的任何迹象 但 fiddler 请求显示负载是通过 J
  • 你调用的对象是空的。 IE问题

    我在 ASP Net 中开发了一个网站 它在除 IE 之外的所有浏览器中都能正常工作 在 IE 中我收到错误 对象引用未设置为对象的实例 在我的本地计算机中一切正常 发布到服务器后出现错误 有什么想法如何解决这个问题吗 这是我得到的堆栈跟踪
  • 多态 MVC 视图

    因此 我在 ASP NET MVC 中制作一个注册页面 其中有一个字段列表 该列表会根据许多条件 从数据库中获取 而变化 在每次更新数据库时不更改代码的情况下 在视图上显示这些字段的最佳方法是什么 我正在考虑的当前系统是制作一个带有 名称
  • 在 MVC 类上创建主键字段

    我是 MVC 和 C 新手 我只是偶然发现它并发现它很有趣 我遇到了一个不允许我继续的问题 这是我的代码 using System using System Collections Generic using System Linq usi
  • 如何使用 ASP.NET MVC 4.0 DonutOutputCache VaryByCustom 使缓存失效

    我正在为我的 ASP NET 应用程序使用 DevTrends MvcDonutCaching 包 它工作得很好 我目前遇到的一个问题是使我为子操作设置的 VaryByCustom 缓存无效 这是我用于 VaryByCustom 设置的一些
  • 如何在 MVC4 的 UserProfile 中创建自定义附加字段

    我遇到了新的 ASP MVC 4 功能 它附带了新的成员资格数据库模式和新的初始化 在 mvc 3 和旧版本中 开发人员能够使用 web config 中的规范创建自定义用户配置文件字段 但现在我面临默认 mvc 4 项目中过滤器命名空间中
  • 有没有更好的方法使用 MVC 4 和 Entity Framework 5 添加子记录?

    我正在学习 MVC 并结合实体框架处理其无状态性质 我的问题是 有没有更优雅的方式来处理下面的场景 我有两个 POCO 实体 public class Contest public long ID get set public IColle
  • Elmah 不会在 MVC 应用程序中记录 http post 请求的异常 - 如果请求包含 XML

    我在 MVC4 RC 应用程序中遇到了一个奇怪的问题 在 NET 4 0上运行 我刚刚设置 Elmah 来记录异常 错误 我基本上安装了埃尔玛MVC and elmah sqlserverNuGet 包 分别为2 0 0和1 2版本 它似乎
  • MVC4 如何设置 cookie 然后重定向到操作

    您好 我正在尝试获取用户角色并将其设置为我的应用程序中的 cookie 我有以下有效的代码 public ActionResult Index var user User Identity Name set by 3rd party cen
  • 使用 401 发送消息:Asp.net Web-api

    我在 ASP NET Web API 中 在登录方法中 我根据数据库检查用户 密码 如果它们不匹配 我将返回 401 状态代码以及invalid user or password method like var content new St
  • mvc4 捆绑包,它是如何工作的?

    在 mvc4 中 他们使用捆绑包来调用所有脚本和 css 文件一次 据我所知 调用js和cs文件时 它们的顺序很重要 如果我使用捆绑包 我如何知道捆绑包内的 css 和 js 文件的顺序是否正确 我可以定制订购吗 我现在的日期选择器有问题
  • 在 MVC 4 中为 3 层架构配置 Ninject

    目前 我正在构建一个两层的网站 Web UI 这是一个MVC 4项目 用于与用户交互 数据访问 这是一个 C 库 该层负责与数据库交互 我正在使用 Ninject 进行依赖注入 到现在为止 还好 但现在 我想在 Web UI 和数据访问之间
  • 如何使用 MVC 4 制作提交按钮

    我正在尝试编写一个代码 从用户输入中获取姓氏和名字 并将这些值存储在 MVC4 的数据表中 我在 Accountcontroller cs 下添加了以下代码 这将创建一个提交按钮 一旦用户单击提交按钮 它会将用户输入添加到数据集中 priv
  • 使用asp.net MVC4,如何使我的根index.html默认执行?

    对于我网站的大部分内容 我希望以 MVC 方式进行正常路由 但是 当应用程序首次启动时 我不希望路由转到 Home Index cshtml 我希望它简单地转到 Index html 我当前的 RegisterRoutes 看起来像这样 并
  • 此资源不支持“multipart/form-data”

    我有 WEBAPI2 后端 我尝试从邮递员发送表单数据 但出现这个错误 没有 MediaTypeFormatter 可用于从媒体类型为 multipart form data 的内容中读取类型为 StartWorkingDay 的对象 这是
  • 如何在视图中包含js文件。 ASP.NET MVC 4

    我想知道为什么我的 js 文件在视图中调用时可以工作 section Scripts 但当我调用它时不起作用 section Scripts 这是因为 js文件无法访问 Views 文件夹 你必须启用它 http blog falaf
  • 子文件夹中的控制器和视图

    我正在使用 ASP NET MVC 4 开发一个 Web 应用程序 我想按以下方式组织我的控制器和视图 Controller Admin LessonController cs ExerciseController cs HomeContr
  • 如何使用带有 Scripts.Render 的 ASP MVC 4 捆绑包的脚本延迟属性

    我浏览了 Google 和 Stackoverflow 但没有找到答案 是否有任何内置方法可以使捆绑包按延迟执行 或者有人知道有人为此编写的扩展帮助器方法吗 尝试将 Web Optimization 升级到版本 1 1 0Codeplex

随机推荐

  • maven-jaxb2-plugin VS jaxb2-maven-plugin 用于多个模式

    我有多个 xsd 模式 我想将它们解组到不同的包中same folder target generated sources xjc 我尝试了这两个插件 似乎都可以很好地使用这两种配置 但在 maven jaxb2 plugin 的情况下 e
  • MYSQL左连接结果的最后一行

    我需要一些 MYSQL 帮助 我有一个名为 Tickets 的表和一个名为 statusLogs 的表 我该如何 select t sl statusId from ticket LEFT JOIN select from statusLo
  • 使用扩展方法的实体框架分页很慢?

    我在 C 的实体框架中遇到查询缓慢的问题 我创建了一个名为 Page 的扩展方法来处理分页 但是当我使用它时 查询变得非常慢 如果我只是执行 Skip page Value pageSize Value Take pageSize Valu
  • 当目标是类型时,为什么 Coq 不允许反转、析构等?

    When refine正在运行一个程序 我试图通过以下方式结束证明inversion on a False假设当目标是Type 这是我尝试做的证明的简化版本 Lemma strange1 forall T Type 0 gt 0 gt T
  • 如何实现一个具有placement new和emplace功能的简单容器?

    我需要实现一个容器来容纳一定数量的元素 并且出于某种原因 它必须在没有任何堆分配的情况下工作 另一个要求是 容器元素不应以任何方式复制或移动 它们必须直接构建到容器分配的内存中 为此 我决定使用placement new并将内存管理完全委托
  • 地理点之间的距离

    我在计算两个地理点之间的距离时遇到问题 地理点是 position1 mapView getProjection fromPixels int e getX int e getY 另一个 double lat 35 1064 double
  • 如何找到两个数据库之间的差异? [关闭]

    Closed 这个问题是无关 目前不接受答案 我正在尝试将更改从数据库复制到数据库 但是我不知道这些更改到底是什么 是否有一个 SQL 脚本可以查找数据库之间不同的对象 然后生成一个脚本来更新 DatabaseB 以匹配 DatabaseA
  • 如何读取 UISlider 拇指图像的大小

    我试图在 UISlider 中的拇指上方居中放置一个额外的 UIView 为此 我需要拇指图像的宽度 在 iOS6 中 这工作得很好 我可以用 CGFloat thumbWidth self navSlider currentThumbIm
  • Java:如何确定正则表达式模式匹配失败的原因?

    我正在使用正则表达式来匹配模式是否匹配 但我也想知道它何时失败 例如 假设我有一个模式 N 1 3 Y 我将它与字符串 NNNNY 进行匹配 我想知道失败是因为N太多了 或者 如果我将其与字符串 XNNY 进行匹配 我想知道它失败是因为字符
  • 如何正确地在单词前面加上“a”和“an”?

    我有一个 NET 应用程序 给定一个名词 我希望它正确地为该单词添加 a 或 an 前缀 我该怎么做呢 在您认为答案是简单地检查第一个字母是否是元音之前 请考虑以下短语 一个诚实的错误 一辆二手车 下载维基百科 解压缩它并编写一个快速过滤程
  • 将base64图像数据转换为angularjs中的图像文件

    在 AngularJS 中将 Base64 文件转换为图像时文件损坏 任何人都可以建议我如何在 AngularJS 中将 Base64 文件转换为图像 我正在使用这种方法将base64文件转换为图像 var imageBase64 imag
  • 如何分割一个大的 xml 文件?

    我们将 记录 导出到 xml 文件 我们的一位客户抱怨该文件太大 他们的其他系统无法处理 因此 我需要拆分文件 同时在每个新文件中重复 标题部分 因此 我正在寻找一些东西 可以让我为应该始终输出的部分定义一些 xpath 并为 行 定义另一
  • 暂停,恢复时给出上次暂停的值

    我有一个热Observable由套接字供电 我可以使用pausable暂停套接字馈送 但是 一旦我 取消暂停 可观察对象 我需要显示在订阅暂停时套接字可能发送的最后一个值 我不想跟踪套接字手动发送的最后一个值 这怎么可能暂停 从文档中的示例
  • CBPeripheralManager startAdvertising 无法在 OS X yosemite 上运行

    使用您的 mac 运行 OS X 10 10 yosemite DP 6 作为 iBeacon 时有人注意到任何问题吗 我尝试了几种工具 也自己开发了它 使用 CBPeripheralManager startAdvertising 但没有
  • React-native-video 播放 Vimeo 和 YouTube

    我想知道是否可以通过 React Native 组件react native video 播放 Vimeo 和 YouTube 到目前为止 我的研究表明这几乎是不可能的 因为react native video需要直接引用文件 或流 而这些
  • 如何在 Delphi 中使用或解决视觉表单继承问题?

    我一直在 Delphi 7 中从事一个项目 我想让表单从其他表单继承组件 我能够完成这项工作 但遇到了以下问题 我将发布解决方案 希望将来能帮助其他人 在表单的 pas 文件中 我会将表单更改为从其他表单继承 但它不会从祖先表单获取组件 对
  • 如何转义任意字符串以用作 Windows 中的命令行参数?

    我有一个字符串列表 我想在单个 Windows 命令行调用中将这些字符串作为参数传递 对于简单的字母数字字符串 只需逐字传递它们就足够了 gt script pl foo bar baz yes no foo bar baz yes no
  • iPhone中的核心数据默认使用哪种持久存储

    我正在我的应用程序中创建多个持久存储 但我仅使用一个持久存储协调器和托管对象模型 现在我的问题是 当我在托管对象上下文上调用 save 方法时 它将使用哪个持久存储来保存对象 所以我想指定用于保存对象的持久存储 同样 在从数据库中获取对象时
  • 为什么Python中的对象不能添加属性? [复制]

    这个问题在这里已经有答案了 用Python shell编写 gt gt gt o object gt gt gt o test 1 Traceback most recent call last File
  • 向控制器提交多次调用的相同 Partial View 数据?

    我在我的视图中添加了一个按钮 单击此按钮后 将添加部分视图 在我的表单中 我可以添加尽可能多的部分视图 提交此表单数据时 我无法将所有部分视图数据发送到控制器 我制作了一个具有所有属性的不同模型 并且我已将该模型的列表添加到我的主模型中 谁