惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Darknet – Hacking Tools, Hacker News & Cyber Security
V
Vulnerabilities – Threatpost
Cloudbric
Cloudbric
G
GRAHAM CLULEY
S
Securelist
Schneier on Security
Schneier on Security
Help Net Security
Help Net Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Project Zero
Project Zero
Spread Privacy
Spread Privacy
P
Privacy International News Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
Cisco Talos Blog
Cisco Talos Blog
T
Tailwind CSS Blog
博客园_首页
有赞技术团队
有赞技术团队
Simon Willison's Weblog
Simon Willison's Weblog
Stack Overflow Blog
Stack Overflow Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Latest news
Latest news
T
Tor Project blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Attack and Defense Labs
Attack and Defense Labs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
O
OpenAI News
J
Java Code Geeks
T
Tenable Blog
K
Kaspersky official blog
AWS News Blog
AWS News Blog
S
Security @ Cisco Blogs
The GitHub Blog
The GitHub Blog
T
Threatpost
月光博客
月光博客
H
Heimdal Security Blog
Security Latest
Security Latest
The Hacker News
The Hacker News
Y
Y Combinator Blog
A
Arctic Wolf
Apple Machine Learning Research
Apple Machine Learning Research
C
Cisco Blogs
美团技术团队
Microsoft Security Blog
Microsoft Security Blog
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
C
CERT Recently Published Vulnerability Notes
D
Docker
Google Online Security Blog
Google Online Security Blog
D
DataBreaches.Net
V
Visual Studio Blog
H
Help Net Security

博客园 - 菜鸟吴迪

Lucene搜索结果排序问题(按时间倒序排的替代解决方法) 利用Lucene.net搜索引擎进行多条件搜索的做法 (转) (转)Razor引擎学习:RenderBody,RenderPage和RenderSection 读取txt文本,批量插入到数据库中! ASP.NET MVC3 返回多个实体或泛型 MySQL数据库集群Master-Slave模式安装摘要 使用HtmlAgilityPack批量抓取网页数据 Jquery each - 菜鸟吴迪 - 博客园 堆?栈?(转) 数据库并发控制!!! Velocity脚本简明教程 Visual Studio的调试技巧 《C#与.NET3.5高级程序设计(第4版)》笔记10 sql分页问题,老话题!! sql查询连续三天之内都有记录的人员!! SELECT INTO 和 INSERT INTO SELECT 两种表复制语句 (转) httpContext里面的东西!!! c#闭包!! c#新特性!!!
Asp.net Mvc Controller接收可控的数组或字典类型的实现方法:
菜鸟吴迪 · 2010-08-26 · via 博客园 - 菜鸟吴迪

http://home.beisencorp.com/space.php?uid=210&do=blog&id=957

Asp.net Mvc Controller接收可控的数组或字典类型的实现方法:

方法一,(最复杂的方法)

扩展ModelBinder 完全自定义一种参数的解析方法。

    /// <summary>

    /// 模式绑定数组接收器 eg:,接收字符数组:参数标记如 [ModelBinder(typeof(ArrayBind<string>))]string[] arrayValue

    /// </summary>

    /// <typeparam name="T"></typeparam>

    public class ArrayBind<T> : IModelBinder

    {

        private _T GetValue<_T>(ModelBindingContext bindingContext, string key)

        {

            ValueProviderResult valueResult = bindingContext.ValueProvider.GetValue(key);

            bindingContext.ModelState.SetModelValue(key, valueResult);

            return (_T)valueResult.ConvertTo(typeof(_T));

        }

        #region IModelBinder 成员

        public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)

        {

            Dictionary<int, T> list = new Dictionary<int, T>();

            string[] allKey = controllerContext.HttpContext.Request.Form.AllKeys;

            foreach (string key in allKey)

            {

                if (!key.StartsWith(bindingContext.ModelName, StringComparison.CurrentCultureIgnoreCase))

                {

                    continue;

                }

                string[] _key = key.Split('.');

                if (_key.Length != 2)

                {

                    continue;

                }

                int me = 0;

                if (int.TryParse(_key[1], out me))

                {

                    list.Add(me, GetValue<T>(bindingContext, key));

                }

            }

            var sort = from k in list orderby k.Key ascending select k;

            return sort.Select<KeyValuePair<int, T>, T>(C => C.Value).ToArray();

        }

        #endregion

    }

然后在Controlleraction方法参数中进行标记,如:

        [HttpPost]

        public ActionResult Edit([Bind(Prefix = "LevelDescription")][ModelBinder(typeof(ArrayBind<string>))]string[] levelOrder)

        {

            return Json(1);

        }

方法二,url参数解析法

http://www.domain.com/post?levelOrder=1&levelOrder=2&levelOrder=3&levelOrder=4&levelOrder=5

方法三,

Js异步提交数据,

var _lev = {};

_lev["lev[0].Status"] = "5";  //里必须从零开始 名字必须一样

_lev["lev[1].Status"] = "6";

$.post("Edit", _lev

, function(json) {

    if (json == "1") { alert(''成功)}

}, "json");

action方法,如:

        [HttpPost]

        public ActionResult Edit(Level[] lev)

        {

            return Json(lev);

        }

如果在action中欲接收一Dictionary 类型值,则变得更加方便,

        $("tr[name = 'LeelArea']").each(function(index) {

            _lev["levelOrder1[" + index + "].key"] = index//这里必须从零开始 名字必须一样

            _lev["levelOrder1[" + index + "].value"] = $(this).find("textarea").val();

        });

        if ($(this).valid()) {

            $.post("Edit", _lev

            , function(json) {

                Alert(json);

            }, "json");

        }

action方法,如:

        [HttpPost]

        public ActionResult Edit(Dictionary<int,string> levelOrder)

        {

            return Json(1);

        }

参考老外的:

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

http://www.hanselman.com/blog/ASPNETWireFormatForModelBindingToArraysListsCollectionsDictionaries.aspx

//js

    //List<User>

          var _lev = {};

          _lev["user[0].name"] = "wudi";

          _lev["user[0].pwd"] = "pwd";

          _lev["user[1].name"] = "wudi";

          _lev["user[1].pwd"] = "pwd";

          $.post("/home/Add", _lev, function(result) {

              if (result <= 0) {

                  alert('保存记录失败!');

              }

              else {

                  c_pr_c.ID = result;

              }

          }, "json");

          //Dictionary<string,user>

          var _lev = {};

          _lev["stock[0].key"] = "MSFT"

          _lev["stock[0].value"] = "Microsoft Corporation"

          _lev["stock[1].key"]= "AAPL"

          _lev["stock[1].value"] = "Apple, Inc."

          $.post("/home/AddDic", _lev, function(result) {

              if (result <= 0) {

                  alert('保存记录失败!');

              }

              else {

                  c_pr_c.ID = result;

              }

          }, "json");

    public class user

    {

        public string name { get; set; }

        public string pwd { get; set; }

    }

 public ActionResult Add(List<user> user)

        {

            return View();

        }

        public ActionResult AddDic(IDictionary<string, string> stock)

        {

            return View();

        }