目前,我在更改que号码上停留了一段时间。该列表由“活动”编译。在视图中,我使用Jquery更改了队列号。我仍然发现后端部分非常困难。如何从后端更改任务的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);
}
模型ActivityEditViewModel
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>();
}
}
模型TaskEditViewModel
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>
答案 0 :(得分:0)
您可以使用诸如批量转储列表之类的方法。首先,您需要获取列表并按如下所示绑定每一列:隐藏字段中的Activity.Id为:
以此类推...
注意:-计数将用于循环索引编号
您应该在Activity.cs中有2个QuestionNumber字段,即Que和oldQue在获取数据列表时Que和oldQue将具有相同的值。在ActivityEditViewModel中添加一列字段“ oldQue”
在Jquery中:每当您更改问题编号时,将问题编号值替换为具有该问题编号值的元素
对于Ex:
活动1:QuesNo-1
活动2:QuesNo-2
活动3:QuesNo-3
活动4:QuesNo-4
如果要将Activity3更新为QuesNo 1,则查找并更新QuesNo 1值Activity,即带有QuesNo-3值的Activity1。
很简单!
现在提交时,使用DbContext的AddRange方法添加所有列表,并进行诸如_context.Activity.AddRange(updatedList);这样的保存更改;