溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

ASP.NET?MVC怎么實(shí)現(xiàn)增加一條記錄同時(shí)添加N條集合屬性所對(duì)應(yīng)的個(gè)體

發(fā)布時(shí)間:2022-08-23 10:29:55 來(lái)源:億速云 閱讀:93 作者:iii 欄目:開(kāi)發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“ASP.NET MVC怎么實(shí)現(xiàn)增加一條記錄同時(shí)添加N條集合屬性所對(duì)應(yīng)的個(gè)體”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“ASP.NET MVC怎么實(shí)現(xiàn)增加一條記錄同時(shí)添加N條集合屬性所對(duì)應(yīng)的個(gè)體”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。

類別中包含一個(gè)產(chǎn)品的集合屬性,如何向數(shù)據(jù)庫(kù)添加一條類別記錄的同時(shí),添加任意多個(gè)產(chǎn)品。

    public class Product
    {
        [DisplayName("產(chǎn)品名稱")]
        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
...

前臺(tái)視圖使用jquery動(dòng)態(tài)生成input,并把input的name屬性設(shè)置成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="添加產(chǎn)品"/>
    </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>
}

沒(méi)有添加產(chǎn)品前:

ASP.NET?MVC怎么實(shí)現(xiàn)增加一條記錄同時(shí)添加N條集合屬性所對(duì)應(yīng)的個(gè)體

添加產(chǎn)品集合:

ASP.NET?MVC怎么實(shí)現(xiàn)增加一條記錄同時(shí)添加N條集合屬性所對(duì)應(yīng)的個(gè)體

HomeController

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

斷點(diǎn)調(diào)試:       

ASP.NET?MVC怎么實(shí)現(xiàn)增加一條記錄同時(shí)添加N條集合屬性所對(duì)應(yīng)的個(gè)體

更新

以上做法至少有二個(gè)弊端:

1、無(wú)法對(duì)新添加的集合屬性對(duì)應(yīng)的個(gè)體進(jìn)行驗(yàn)證。
2、如果破壞集合元素的連續(xù)性,會(huì)影響控制器不能完全接收所有集合記錄。

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

控制器只能接收到集合中的第一條記錄,即Category.Products[0].Name,也就是說(shuō),一旦集合元素不是連續(xù)的,控制器將不能接收到全部集合記錄。

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

ASP.NET?MVC怎么實(shí)現(xiàn)增加一條記錄同時(shí)添加N條集合屬性所對(duì)應(yīng)的個(gè)體

斷點(diǎn)調(diào)試: 

ASP.NET?MVC怎么實(shí)現(xiàn)增加一條記錄同時(shí)添加N條集合屬性所對(duì)應(yīng)的個(gè)體

只能接收到一條記錄。

讀到這里,這篇“ASP.NET MVC怎么實(shí)現(xiàn)增加一條記錄同時(shí)添加N條集合屬性所對(duì)應(yīng)的個(gè)體”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI