通过更改队列号更新整个列表

时间:2018-08-13 09:36:13

标签: c# asp.net-core .net-core

目前,我在更改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>

1 个答案:

答案 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);这样的保存更改;