ASP.NET MVC增加一条记录同时添加N条集合属性所对应的个体

 更新时间:2022年08月23日 08:42:39   作者:Darren Ji  
这篇文章介绍了ASP.NET MVC增加一条记录同时添加N条集合属性所对应个体的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

类别中包含一个产品的集合属性,如何向数据库添加一条类别记录的同时,添加任意多个产品。

    public class Product
    {
        [DisplayName("产品名称")]
        public string Name { get; set; }
    }
 
    public class Category
    {
        [DisplayName("类别名称")]
        public string Name { get; set; }
        private IList<Product> _products = new List<Product>();
 
        public IList<Product> Products
        {
            get { return _products; }
            set { _products = value; }
        }
    }

思路

控制器方法能接收的格式为:
Category.Name
Category.Products[0].Name
Category.Products[1].Name
...

前台视图使用jquery动态生成input,并把input的name属性设置成Category.Products[i].Name格式。

Home/Index.cshtml视图

@model AddingMultipleNestedData.Models.Category
 
@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}
 
@using (Html.BeginForm("Create", "Home", FormMethod.Post, new {id = "addForm"}))
{
    <div>
        @Html.LabelFor(m => m.Name)
        @*@Html.EditorFor(m => m.Name)*@
        @Html.TextBox("Category.Name")
    </div>
    <div id="products"></div>
    <div>
        <input id="btnAddProduct" type="button" value="添加产品"/>
    </div>
    <div>
        <input type="submit" value="提交"/>
    </div>
}
 
@section scripts
{
    <script type="text/javascript">
        $(function() {
            var noOfProducts = 0;
            $('#btnAddProduct').click(function() {
                var product = getNestedName("Category.Products", noOfProducts);
                noOfProducts++;
                $('#products').append("<input type='text' name='"+product+".Name' /><p>");
            });
 
        });
 
        function getNestedName(itemName, itemNumber) {
            return (itemName + "[" + itemNumber + "]");
        }
    </script>
}

没有添加产品前:

添加产品集合:

HomeController

        public ActionResult Index()
        {
            return View();
        }
 
        [HttpPost]
        public ActionResult Create(Category category)
        {
            return View();
        }

断点调试:       

更新

以上做法至少有二个弊端:

1、无法对新添加的集合属性对应的个体进行验证。
2、如果破坏集合元素的连续性,会影响控制器不能完全接收所有集合记录。

Category.Name
Category.Products[0].Name
Category.Products[3].Name  
Category.Products[6].Name  

控制器只能接收到集合中的第一条记录,即Category.Products[0].Name,也就是说,一旦集合元素不是连续的,控制器将不能接收到全部集合记录。

把noOfProducts++;改成noOfProducts = noOfProducts + 3;

断点调试: 

只能接收到一条记录。

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • .NET中接口与类的区别浅析

    .NET中接口与类的区别浅析

    在我们日常开发中经常会用到接口与类,这两者之间究竟有什么区别呢?又有哪些优缺点?下面这篇文章就来给大家介绍了关于.NET中接口与类区别的相关资料,需要的朋友们可以参考借鉴,下面来一起看看吧。
    2017-08-08
  • asp.net生成静态页并分页+ubb

    asp.net生成静态页并分页+ubb

    编程思路生成静态页其实只有内容部分是需要分页的,生成静态页并分页的步骤是在textarea或者在线编辑器中,需要分页的地方就插入一个[ page ]
    2008-10-10
  • VS2010/VS2013项目创建 ADO.NET连接mysql/sql server详细步骤

    VS2010/VS2013项目创建 ADO.NET连接mysql/sql server详细步骤

    这篇文章主要介绍了VS2010/VS2013项目创建,及ADO.NET连接mysql/sql server详细步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • httpHandler实现.Net无后缀名Web访问的实现解析

    httpHandler实现.Net无后缀名Web访问的实现解析

    有时候我们看到很多网站是网址是没有后缀名的,其实.net中可以通过httpHandler来实现。
    2011-10-10
  • asp.net session的使用与过期实例代码

    asp.net session的使用与过期实例代码

    本文章来简单的介绍asp.net中session常见两种用法,一种是session使用如何创建,另一种是告诉你如何判断session过期了,有需要了解的朋友可以参考一下
    2013-08-08
  • ASP.NET中常用的用来输出JS脚本的类

    ASP.NET中常用的用来输出JS脚本的类

    在ASP.NET中我们经常需要输出一些JS脚本,比如弹出一个警告窗口,返回到历史页面等JS功能,我看到网上好多这方面的代码,以下代码是其中之一。
    2010-02-02
  • VS2017调用MySQL 8.0的方法

    VS2017调用MySQL 8.0的方法

    这篇文章主要为大家详细介绍了VS2017调用MySQL 8.0的方法,附上C++程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • Web里URL空格的转换方法

    Web里URL空格的转换方法

    今天收到一个Bug修复的任务,Bug为在页面上输入一个文件夹名包含空格,点击该文件夹的URL后链接错误。
    2013-05-05
  • asp.net 简单验证码验证实现代码

    asp.net 简单验证码验证实现代码

    网站开发一般登录注册的时候都要用到了 所以写下来给大家参考参考
    2009-09-09
  • EF Core项目中不同数据库需要的安装包介绍

    EF Core项目中不同数据库需要的安装包介绍

    这篇文章介绍了EF Core项目中不同数据库需要的安装包,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05

最新评论