form 利用BeginCollectionItem提交集合List<T>数据 以及提交的集合中含有集合的数据类型 如List<List<T>> 数据的解决方案
例子:
public class IssArgs
{
public List<IssTabArgs> Tabs { get; set; }
} public class IssTabArgs
{
public int Num { get; set; } public string Tab { get; set; } public List<IssArg> Args { get; set; }
} public class IssArg
{
public int Num { get; set; } public string Name { get; set; } public string Value { get; set; }
}
现在需要上传这样的数据
@using (Html.BeginForm("SaveGpIss", "Issue"))
{ @foreach (var item in Model.TabArgs.Tabs)
{
@Html.Partial("_ArgsTabPar",item)
} }
@model Web.Models.Vm.Issue.IssTabArgs <tbody>
@using (Html.BeginCollectionItem("TabArgs.Tabs"))
{
@Html.HiddenFor(m => m.Num, new { @class = "arg_tab_num" })
<tr class="un">
<td colspan="" class="w">@Html.EditorFor(m=>m.Tab, new { HtmlAttributes = new { PlaceHolder = "表名称" } })</td>
</tr>
foreach (var item in Model.Args)
{
@Html.Partial("_ArgPar",item)
}
}
</tbody>
下面是第级集合的重点
@model Web.Models.Vm.Issue.IssArg @{
var colId = ViewData.TemplateInfo.HtmlFieldPrefix;
}
<tr>
@using (Html.BeginCollectionItem(colId + ".Args"))
{
@Html.HiddenFor(m=>m.Num,new {@class="arg_num"})
<td class="n">@Html.EditorFor(m => m.Name, new { HtmlAttributes = new { PlaceHolder = "参数名称" } })</td>
<td class="i">@Html.EditorFor(m => m.Value, new { HtmlAttributes = new { PlaceHolder = "参数值" } })</td>
}
</tr>
ViewData.TemplateInfo.HtmlFieldPrefix;
BeginCollectionItem 反编译代码,将 Guid.NewGuid().ToString() 值储存 ViewData.TemplateInfo.HtmlFieldPrefix;
using System;
using System.Collections.Generic;
using System.IO;
using System.Web;
using System.Web.Mvc; namespace HtmlHelpers.BeginCollectionItem
{
public static class HtmlPrefixScopeExtensions
{
private const string IdsToReuseKey = "__htmlPrefixScopeExtensions_IdsToReuse_"; public static IDisposable BeginCollectionItem(this HtmlHelper html, string collectionName)
{
return html.BeginCollectionItem(collectionName, html.ViewContext.Writer);
} public static IDisposable BeginCollectionItem(this HtmlHelper html, string collectionName, TextWriter writer)
{
Queue<string> idsToReuse = HtmlPrefixScopeExtensions.GetIdsToReuse(html.ViewContext.get_HttpContext(), collectionName);
string str = idsToReuse.Count > ? idsToReuse.Dequeue() : Guid.NewGuid().ToString();
writer.WriteLine("<input type=\"hidden\" name=\"{0}.index\" autocomplete=\"off\" value=\"{1}\" />", (object) collectionName, (object) html.Encode(str));
return html.BeginHtmlFieldPrefixScope(string.Format("{0}[{1}]", (object) collectionName, (object) str));
} public static IDisposable BeginHtmlFieldPrefixScope(this HtmlHelper html, string htmlFieldPrefix)
{
return (IDisposable) new HtmlPrefixScopeExtensions.HtmlFieldPrefixScope(html.ViewData.TemplateInfo, htmlFieldPrefix);
} private static Queue<string> GetIdsToReuse(HttpContextBase httpContext, string collectionName)
{
string str1 = "__htmlPrefixScopeExtensions_IdsToReuse_" + collectionName;
Queue<string> stringQueue = (Queue<string>) httpContext.Items[(object) str1];
if (stringQueue == null)
{
httpContext.Items[(object) str1] = (object) (stringQueue = new Queue<string>());
string str2 = httpContext.Request[collectionName + ".index"];
if (!string.IsNullOrEmpty(str2))
{
string str3 = str2;
char[] chArray = new char[]{ ',' };
foreach (string str4 in str3.Split(chArray))
stringQueue.Enqueue(str4);
}
}
return stringQueue;
} internal class HtmlFieldPrefixScope : IDisposable
{
internal readonly TemplateInfo TemplateInfo;
internal readonly string PreviousHtmlFieldPrefix; public HtmlFieldPrefixScope(TemplateInfo templateInfo, string htmlFieldPrefix)
{
this.TemplateInfo = templateInfo;
this.PreviousHtmlFieldPrefix = this.TemplateInfo.HtmlFieldPrefix;
this.TemplateInfo.HtmlFieldPrefix = htmlFieldPrefix;
} public void Dispose()
{
this.TemplateInfo.HtmlFieldPrefix = this.PreviousHtmlFieldPrefix;
}
}
}
}
还有一种解决方式就是通过脚本的方式改变input name 的内容,这里不多说了
form 利用BeginCollectionItem提交集合List<T>数据 以及提交的集合中含有集合的数据类型 如List<List<T>> 数据的解决方案的更多相关文章
- C#中的集合
[集合不同于数组,是一组可变类型的.可变数量的元素的组合,这些元素可能共享某些特征,需要以某种操作方式一起进行操作.一般来讲,为了便于操作这些元素的类型是相同的] [集合与数组的区别:数组是连续的.同 ...
- ffmpeg从AVFrame取出yuv数据到保存到char*中
ffmpeg从AVFrame取出yuv数据到保存到char*中 很多人一直不知道怎么利用ffmpeg从AVFrame取出yuv数据到保存到char*中,下面代码将yuv420p和yuv422p的数 ...
- python 读取SQLServer数据插入到MongoDB数据库中
# -*- coding: utf-8 -*-import pyodbcimport osimport csvimport pymongofrom pymongo import ASCENDING, ...
- java中的集合和视图
一.集合的概念 何为集合,集合就是相当于一个对象的容器.集合是类似数组的一个作用.既然有了数组,为何还要有集合呢,由于数组对象一旦创建,其大小便不可以更改,我们只能往数组中存放创建时数量的对象.而集合 ...
- JAVA笔记整理(九),JAVA中的集合
在工作中,我们经常需要将多个对象集中存放,可以使用数组,但是数组的长度一旦固定之后是不可变的,为了保存数量确定的数据,我们可以使用JAVA中的集合. 在我看来,JAVA中的集合可以看作是一个特殊的数据 ...
- form表单提交数据,页面必定会刷新,ajax提交数据不会刷新,做到悄悄提交,多选删除,ajax提交实例
很多页面用到的模态对话框,如知明网站https://dig.chouti.com/的登录页都是模态对话框, 当点登录时,是用的ajax提交,因为输入错了信息,有返回消息,而页面没有刷新. jquery ...
- 使用jQuery.form插件,实现完美的表单异步提交
传送门:异步编程系列目录…… 时间真快,转眼一个月快结束了,一个月没写博客了!手开始生了,怎么开始呢…… 示例下载:使用jQuery.form插件,实现完美的表单异步提交.rar 月份的尾巴,今天的主 ...
- js表单动态添加数据并提交
情景1:已经存在form对象了,动态为form增加对象并提交 function formAppendSubmit(){ var myform=$('#newArticleForm'); //得到for ...
- Spring MVC防止数据重复提交
现实开发中表单重复提交的例子很多,就包括手上这个门户的项目也有这种应用场景,用的次数多,但是总结,这还是第一次. 一.基本原理 使用token,给所有的url加一个拦截器,在拦截器里面用java的UU ...
随机推荐
- 零元学Expression Blend 4 - Chapter 46 三分钟快速充电-设定Margin的小撇步
原文:零元学Expression Blend 4 - Chapter 46 三分钟快速充电-设定Margin的小撇步 如果需要经常的使用某一项工具,总会希望能够更快速的使用各项设定达到效果 今天要介绍 ...
- UWP入门(五)--控件模板
原文:UWP入门(五)--控件模板 通过在 XAML 框架中创建控件模板,你可以自定义控件的可视结构和可视行为(eg:勾选框的三种状态). 控件有多个属性,如 Background.Foregroun ...
- Web 高效开发必备的 PHP 框架
摘要: 每周为您推送最有价值的开源技术内参! 码云项目推荐 1.项目名称:多功能 THinkPHP 开源框架 项目简介:使用 THinkPHP 开发项目的过程中把一些常用的功能或者第三方 sdk 整合 ...
- jquery中的ajax应用集锦
一,原生JS实现ajax: 1 2 3 4 5 6 7 8 9 10 11 function AjaxGet() { var xhrObj; ...
- eclipse下jdbc数据源与连接池的配置及功能简介
今天在做四则运算网页版的时候遇到了一个困惑,由于需要把每个产生的式子存进 数据库,所以就需要很多次重复的加载驱动,建立连接等操作,这样一方面写程序不方便,加大了程序量,另一方面,还有导致数据库的性能急 ...
- linux命令---grep命令使用
grep 常用参数: -w 精准匹配 -r 递归匹配 -l 列出匹配内容的文件名称-v 排除 结合sed,批量替换文件内容 sed 's#10.151.30.165#10.0.3.162#g' -i ...
- Python笔记【2】_列表学习
#!/usr/bin/env/python #-*-coding:utf-8-*- #Author:LingChongShi #查看源码Ctrl+左键 #字符串:通常有单引号“'”.双引号“" ...
- Python绘制语谱图+时域波形
"""Python绘制语谱图""" """Python绘制时域波形""" # 导 ...
- 提升——树形DP
这里讲提高一点的内容,所以没有树形DP基础的,先看一下基础部分: 浅说——树形DP 闲言不表,看第一题. 这道题是典型的树上最长链问题.(就是一个模板题) 给定一棵树,树上共有N个节点(N<=5 ...
- .Net之Layui多图片上传
前言: 多图上传在一些特殊的需求中我们经常会遇到,其实多图上传的原理大家都有各自的见解.对于Layui多图上传和我之前所说的通过js获取文本框中的文件数组遍历提交的原理一样,只不过是Layui中的up ...