我有一个业务模型,该模型仅继承自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
。基本上,这会遍历模型中的所有子类别,在实体状态方面将它们标记为未更改(因此框架不会尝试将它们作为新的添加到数据库中),然后将子类别添加到用户的集合中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句