日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

ASP.NET?MVC增加一條記錄同時添加N條集合屬性所對應的個體_實用技巧

作者:Darren?Ji ? 更新時間: 2022-10-18 編程語言

類別中包含一個產品的集合屬性,如何向數據庫添加一條類別記錄的同時,添加任意多個產品。

    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;

斷點調試:?

只能接收到一條記錄。

原文鏈接:https://www.cnblogs.com/darrenji/p/3696415.html

欄目分類
最近更新