通过更改 que 编号更新整个列表



目前我已经在更改 que 数上卡了一段时间。该列表由活动编译。在视图中,我使用 Jquery 更改了 que 号。我仍然觉得后端部分非常困难。如何更改后端任务的 Que 编号?它如何与任务 ID 一起使用,以便全部更改并保存它?

视图的屏幕截图,它的外观: https://ibb.co/e7qXwU

活动控制器

public class ActivitiesController : Controller
{
private readonly WerkInstructionWebAppContext _context;

public ActivitiesController(WerkInstructionWebAppContext context)
{
_context = context;
}
// GET: Activities
public async Task<IActionResult> Index(String searchString)
{
ViewData["CurrentFilter"] = searchString;
List<Models.Activity> activities;
if (!String.IsNullOrEmpty(searchString))
activities = await _context.Activity.Where(w => w.Title.Contains(searchString)).Take(100).AsNoTracking().ToListAsync();
else
activities = await _context.Activity.Take(100).AsNoTracking().ToListAsync();
activities = activities.OrderByDescending(a => a.ID).ToList();
return View(activities);
}
private void PopulateMetaTypeDropDownList(object selectedMetaType = null)
{
ViewBag.Meta = new SelectList(new[] { "Geen", "Schoonmaken en smeren", "Operationele check voor verborgen functies", "Inspectie en Functionele Check", "Revisie", "Vervanging" }, selectedMetaType);
}
// GET: Activities/Create
public IActionResult Create(int? workInstructionId)
{
var activity = new Models.Activity();
if (workInstructionId != null)
{
_workInstructionId = (int)workInstructionId;
var workInstruction = _context.WorkInstruction
.SingleOrDefault(m => m.ID == _workInstructionId);
ViewBag.que = GetNextQue(workInstruction);
activity.Soort = workInstruction.Soort;
}
else
ViewBag.que = 1;
//PopulateActivitiesDropDownList();
PopulateMetaTypeDropDownList();
return View(activity);
}
private static int _workInstructionId = 0;
// POST: Activities/Create
// To protect from overposting attacks, please enable the specific properties you want to bind to, for 
// more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("ID,Title,Que,FunctionalPlaceNumber, Image, Meta")] Activity activity)
{
if (ModelState.IsValid)
{
// PopulateActivitiesDropDownList();
if (_workInstructionId != 0)
{
activity.WorkInstruction = await _context.WorkInstruction
.SingleOrDefaultAsync(m => m.ID == _workInstructionId);
}
_context.Add(activity);
await _context.SaveChangesAsync();
return RedirectToAction("Edit", new { id = activity.ID });
}
return View(activity);
}
// GET: Activities/Edit/5
public async Task<IActionResult> Edit(int? id, int? workinstructionId, String searchString)
{
ViewData["CurrentFilter"] = searchString;
if (id == null)
{
return NotFound();
}
if (workinstructionId != null)
_workInstructionId = (int)workinstructionId;

var activity = _context.Activity.Include(a => a.Tasks).Include(a => a.WorkInstruction).SingleOrDefault(m => m.ID == id);
activity.Tasks = activity.Tasks.OrderBy(t => t.Que).ToList();
ActivityEditViewModel activityEditViewModel = new ActivityEditViewModel(activity);
PopulateMetaTypeDropDownList();
if (!String.IsNullOrEmpty(searchString))
{
var workInstructions = await _context.WorkInstruction.Include(w => w.Activities).ToListAsync();
activityEditViewModel.availableWorkInstruction = workInstructions.Where(w => w.Title != null && w.Title.Contains(searchString)).ToList();
}
return View(activityEditViewModel);
}
// POST: Activities/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(int id, [Bind("ID,Title,Que,FunctionalPlaceNumber,Image, Meta, Tasks")] CreateActivityViewModel createActivityViewModel)
{
if (ModelState.IsValid)
{
var activity = _context.Activity.Include(a => a.Tasks).SingleOrDefault(m => m.ID == id);
BinaryReader reader = null;
try
{
activity.ID = createActivityViewModel.ID;
activity.Title = createActivityViewModel.Title;
activity.Que = createActivityViewModel.Que;
activity.FunctionalPlaceNumber = createActivityViewModel.FunctionalPlaceNumber;
activity.Meta = createActivityViewModel.Meta;

if (createActivityViewModel.Image != null)
{
reader = new BinaryReader(createActivityViewModel.Image.OpenReadStream());
activity.Image = compressImage(reader.ReadBytes((int)createActivityViewModel.Image.Length));
}
_context.Update(activity);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!ActivityExists(activity.ID))
{
return NotFound();
}
else
{
throw;
}
}
if (_workInstructionId != 0)
{
var workInstructionId = _workInstructionId;
return RedirectToAction("Edit", "WorkInstructions", new { id = workInstructionId });
}
return RedirectToAction(nameof(Index));
}
return View(createActivityViewModel);
}

模型活动编辑视图模型

public class ActivityEditViewModel : Activity
{
public List<WorkInstruction> availableWorkInstruction { get; set; }
public ActivityEditViewModel(Activity activity)
{
this.ID = activity.ID;
this.Que = activity.Que;
this.Tasks = activity.Tasks;
this.Title = activity.Title;
this.FunctionalPlaceNumber = activity.FunctionalPlaceNumber;
this.WorkInstruction = activity.WorkInstruction;
this.Image = activity.Image;
this.Meta = activity.Meta;
this.Soort = activity.Soort;
availableWorkInstruction = new List<WorkInstruction>();
}
}

模型任务编辑视图模型

public class TaskEditViewModel : Task
{
public List<Activity> availableActivity { get; set; }
public TaskEditViewModel(Task task)
{
this.ID = task.ID;
this.Que = task.Que;
this.Norm = task.Norm;
this.Activity = task.Activity;
this.How = task.How;
this.What = task.What;
this.Image = task.Image;
this.Image2 = task.Image2;
this.Action = task.Action;
this.Meta = task.Meta;
this.Soort = task.Soort;
availableActivity = new List<Activity>();
}
}

视图

<h2>List of tasks : </h2><a href="@Url.Action("Create", "Tasks", new { activityId = Model.ID })"><img src="~/images/add.png" class="add-editwork-activity" /> </a><a href="@Url.Action("Preview", "Activities", new { id = Model.ID})"><img src="~/images/document.png" class="preview-editwork-activity" /> </a>
<table class="change-table, table" cellpadding="0" cellspacing="0" border="0" id="changeTable">
<thead>
<tr>
<th>
Move
</th>
<th>
Step
</th>
<th>
Title
</th>
<th>
Options
</th>
</tr>
</thead>
<tbody id="changeTableBody">
@foreach (var task in Model.Tasks)
{
<tr class="changeTableRow">
<td class="drag-handler"></td>
<td class="change-table__cell">
<b class="draggableIndex">@task.Que</b>
</td>
@if (Model.WorkInstruction.Soort == "WB-Werkinstructie")
{
<td class="change-table__cell">
<a href="@Url.Action("Edit", "Tasks", new { id = task.ID, activityId = Model.ID })">@Html.DisplayFor(modelItem => task.Action)</a>
</td>
}
else
{
<td class="change-table__cell">
<a href="@Url.Action("Edit", "Tasks", new { id = task.ID, activityId = Model.ID })">@Html.DisplayFor(modelItem => task.What)</a>
</td>
}
<td class="change-table__cell">
<a href="@Url.Action("Edit", "Tasks",new { id=task.ID, activityId = Model.ID})"><img src="~/images/edit.png" class="control-clicks" /> </a> |
<a href="@Url.Action("Copy", "Tasks",new { id=task.ID})"><img src="~/images/copy.png" class="control-clicks" /> </a> |
<a href="@Url.Action("Delete", "Tasks", new { id=task.ID})"><img src="~/images/verwijder.png" class=control-clicks /></a>
</td>
</tr>
}
</tbody>
</table>

您可以使用类似列表批量转储的东西。首先,您需要获取列表并绑定每一列,如下所示: 在隐藏字段中 Activity.Id 为:

等等...

注意:- 计数将用于循环索引号

您应该在活动中有 2 个问题编号字段.cs即 Que 和 oldQue 在获取数据列表时,Que 和 oldQue 将具有相同的值 在活动编辑视图模型中添加一个列字段"oldQue">

在 Jquery 中:每当您更改问题编号时,将问题编号值与已经具有该问题编号值

的元素交换 例如:活动 1 : QuesNo - 1
活动 2 : QuesNo - 2
活动 3 : QuesNo - 3
活动 4 :
QuesNo - 4

如果要将活动 3 更新为 QuesNo 1,则查找并更新 QuesNo 1 值 Activity 即具有 QuesNo - 3 值的活动 1。
简单!

现在提交时使用 DbContext 的 AddRange 方法添加所有列表,并像_context这样进行保存更改。Activity.AddRange(updateList(;

最新更新