我有下面的代碼在我看來,以生成動態複選框:更新數據庫基於選中的複選框
@foreach (var sub in Model)
{
<div class="row">
<div class="col-md-3">
<input type="checkbox"
value="@sub.Id"
name="Profile.InterestIds"
checked="@sub.IsChecked"/>
</div>
<div class="col-md-6">
@sub.Title
</div>
</div>
}
在這個應用程序,所以如果用戶未選中的項目,我們使用的是軟刪除機制,我們剛剛成立IsDeleted
至true
使用_memberInterestService.Delete(id, item.Id, true);
。下面是這樣做的過程中,代碼:
public override void Update(UserProfileDto item)
{
// Getting all Member Interests (where IsDeleted == true)
var memberIntersestIds = _memberInterestService.GetAllPlusDeleted();
// List of ids in the database as Guid
var dbIds = memberIntersestIds.Select(p => p.InterestSubCategoryId);
var union = dbIds.ToList().Union(item.InterestIds);
// item.InterestIds is IEnumerable<Guid> (selected check boxes)
if (item.InterestIds != null)
{
var guids = union as Guid[] ?? union.ToArray();
foreach (var id in guids)
if (_memberInterestService.IsSubInterestExist(id))
_memberInterestService.Delete(id, item.Id, true);
foreach (var id in guids)
{
if (!_memberInterestService.IsSubInterestExist(id))
_memberInterestService.Add(new MemberInterestDto
{
UserProfileId = item.Id,
InterestSubCategoryId = id
});
else
_memberInterestService.Delete(id, item.Id, false);
}
}
else
foreach (var memberInterest in memberIntersestIds)
_memberInterestService.Delete(memberInterest.InterestSubCategoryId, item.Id, true);
}
此代碼工作正常,直到用戶提交表單沒有任何反應,此代碼不會從數據庫中刪除未選中項目後,未選中的複選框之一。任何想法?
更新:我得到的代碼工作,通過改變foreach循環一個for循環,因爲每個複選框的ID必須是唯一的:
@for (int i = 0; i < Model.Count(); i++)
{
<div class="row">
<div class="col-md-3">
<input type="checkbox" id="@i"
value="@Model.ElementAt(i).Id"
name="Profile.InterestIds"
class = "interest-checkbox"
checked="@Model.ElementAt(i).IsChecked"/>
</div>
<div class="col-md-6">
@Model.ElementAt(i).Title
</div>
</div>
}
然後我使用Union
來改變方法Except
:(also used this suggestions)
public override void Update(UserProfileDto item)
{
var memberIntersestIds = _memberInterestService.GetMyInterestsExceptDeleted(item.Id);
if (item.InterestIds != null)
{
var dbIds = memberIntersestIds.Select(p => p.InterestSubCategoryId);
var guids = dbIds.ToList().Except(item.InterestIds).ToArray();
foreach (var id in guids)
{
if (_memberInterestService.IsSubInterestExist(id, item.Id))
{
_memberInterestService.Delete(id, item.Id, true);
}
else
{
_memberInterestService.Add(new MemberInterestDto
{
UserProfileId = item.Id,
InterestSubCategoryId = id
});
}
}
}
else
{
foreach (var memberInterest in memberIntersestIds)
{
_memberInterestService.Delete(memberInterest.InterestSubCategoryId, item.Id, true);
}
}
}
現在我可以未被檢查的項目,但它並沒有檢查他們回來,因爲他們在數據庫中,他們存在設置爲1
。
無法從代碼中發現,如何確定在服務器中複選框是否已選中或未選中? –
@ChetanRanpariya如果複選框被選中,模型聯編程序會爲我提供它們的值,否則它們將是'null' –