簡體   English   中英

如何將ICollection值存儲到MVC5中的數據庫中?

[英]How to store ICollection value into database in MVC5?

我有一個業務模型,該模型簡單地繼承自ApplicationUser,在其中有一個定義如下的字段:

public class Business : ApplicationUser
{
    ...

    public virtual ICollection<Subcategory> Subcategories { get; set; }

    ...
}

然后,我為此特定模型創建了一個視圖模型,它還包括上面的行,因此它具有以下內容:

public class BusinessViewModel
{
    ...

    public virtual ICollection<Subcategory> Subcategories { get; set; }

    ...
}

然后,在我看來,我有這樣的事情:

<div class="form-group">
    @Html.LabelFor(model => model.Subcategories, "Subcategory", htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        <span id="subcats">

        </span>
    </div>
</div>

而且,根據先前選擇的類別,我將通過AJAX調用填充子類別。 我的JS部分看起來像這樣:

$("#CategoryID").change(function () {
    $("#subcats").empty();

    $.ajax({
        type: 'POST',
        url: '/Account/GetSubcategories',
        dataType: 'json',
        data: { id: $("#CategoryID").val() },
        success: function (subcategories) {
            $.each(subcategories, function (i, subcategory) {
                $("#subcats").append('<input type="checkbox" name="' + subcategory.value + '" value="' + subcategory.id + '" />' + subcategory.value + '<br />');
            });
        },
        error: function (ex) {
            console.log('Failed to retrieve subcategories! ' + ex);
        }
    });

    return false;
});

因此,關鍵是,當表單被填寫,並且用戶單擊按鈕后,在AspNetUsers中注冊了一個新的業務用戶,當我只有一個“業務”的子類別字段時,一切正常,但是現在我更改了邏輯,我接受業務子類別的集合。 而且我現在不知道如何將其存儲在數據庫中,我有類似的內容,但是您可以注意到我沒有存儲子類別。 如何存儲子類別?

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> RegisterBusiness(BusinessViewModel model)
{
    if (ModelState.IsValid)
    {
        var user = new Business { BusinessName = model.BusinessName, BusinessAddress = model.BusinessAddress, CategoryID = model.CategoryID,
            BusinessZip = model.BusinessZip, BusinessPhone = model.BusinessPhone, BusinessDescription = model.BusinessDescription, Facebook = model.Facebook, Twitter = model.Twitter, UserName = model.BusinessName, Email = model.Email };
        var result = await UserManager.CreateAsync(user, model.Password);

        if (result.Succeeded)
        {
            ...
        }
        AddErrors(result);
    }

    ...
}

我還如何獲取已檢查的子類別,然后將它們作為集合存儲在數據庫中?

您可以執行以下操作:

foreach(var subcategory in model.Subcategories)
{
    db.Entry(subcategory).State = EntityState.Unchanged;
    user.Subcategories.Add(subcategory);
}

db是您的ApplicationDbContext 基本上,這會遍歷模型中的所有子類別,將它們在實體狀態方面標記為不變(因此框架不會嘗試將它們作為新的添加到數據庫中),然后將子類別添加到用戶的集合中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM