У меня есть список объектов, и у каждого из них есть флажок, и каждый раз, когда я выбираю флажок, он создает еще один с тем же идентификатором и описанием. Я не знаю, что делать.
Я использую только метод Edit.
Это мой контроллер:
GET:
[HttpGet]
public async Task Edit(int id)
{
var profileTraceClassList = _appServiceProfileTraceClass.GetAll().ToList();
var traceClassList = _appServiceTraceClass.GetAll().ToList();
var traceClassData = (from traceClass in traceClassList
join profileTraceClass in profileTraceClassList
on traceClass.Id equals profileTraceClass.TraceClassId into traceClassesGroup
from profileTraceClass in traceClassesGroup.DefaultIfEmpty()
select new ModelProfileTraceClass
{
TraceClassId = traceClass.Id,
ProfileTraceId = id,
IsSelected = profileTraceClass != null && profileTraceClass.ProfileTraceId == id,
Description = traceClass.Description
}).ToList();
ViewBag.ProfileTraceTypeId = id;
var profileTraceClassData = new ModelProfileTraceClassEdit
{
ProfileTraceTypeId = id,
ProfileTraceClasses = traceClassData
};
return View(profileTraceClassData);
}
ПОСТ:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task Edit(ModelProfileTraceClassEdit model)
{
try
{
var selectedClasses = model.ProfileTraceClasses.Where(m => m.IsSelected)
.Select(tc => Mapper.Map
(tc));
foreach (var obj in selectedClasses)
{
await _appServiceProfileTraceClass.UpdateAsync(obj).ConfigureAwait(false);
}
return RedirectToAction("Index", "DB2ProfileTraceType", new { id = model.ProfileTraceTypeId });
}
catch (Exception ex)
{
ViewBag.ErrorMessage = ex.Message;
return View(model);
}
}
Это вид:
@{
ViewData["Title"] = "Select";
var profileTraceClassesList = Model.ProfileTraceClasses.ToList();
}
Select the Trace Classes
@using (Html.BeginForm("Edit", "DB2ProfileTraceClass", FormMethod.Post)){
@if (profileTraceClassesList.Any())
{
Select All
}
Select
@Html.DisplayNameForInnerType((ModelProfileTraceClass su) => su.TraceClassId)
@Html.DisplayNameForInnerType((ModelProfileTraceClass su) => su.Description)
@for (int i = 0; i < profileTraceClassesList.Count; i++)
{
@Html.DisplayFor(model => profileTraceClassesList.TraceClassId)
@Html.DisplayFor(model => profileTraceClassesList.Description)
@Html.HiddenFor(model => profileTraceClassesList.ProfileTraceId)
}
Submit
@section Scripts {
$(document).ready(function () {
$('#selectAll').click(function () {
$('input.select-item').prop('checked', this.checked);
});
});
@{
await Html.RenderPartialAsync("_ValidationScriptsPartial");
}
}
}
это код ProfileTraceClass.cs:
public class ProfileTraceClass : EntityBase
{
public TraceClass TraceClass { get; set; }
public int ProfileTraceId { get; set; }
public int TraceClassId { get; set; }
}
а это модель:
public class ModelProfileTraceClass : ModelEntityBase
{
public int? ProfileTraceId { get; set; }
public int TraceClassId { get; set; }
public ModelTraceClass TraceClass { get; set; }
public ICollection? TraceClasses { get; set; }
public bool IsSelected { get; set; }
public string Description { get; set; }
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... pdateasync
Мобильная версия