Дублирование классов с помощью UpdateAsyncC#

Место общения программистов C#
Ответить
Anonymous
 Дублирование классов с помощью UpdateAsync

Сообщение Anonymous »

Я новичок в C#, и у меня возникли проблемы с кодом.
У меня есть список объектов, и у каждого из них есть флажок, и каждый раз, когда я выбираю флажок, он создает еще один с тем же идентификатором и описанием. Я не знаю, что делать.
Я использую только метод 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»