Ajax无法使用编辑方法

时间:2016-02-01 17:09:45

标签: asp.net-mvc asp.net-mvc-4 asp.net-ajax

我有一个级联下拉列表的ajax方法,类似于country-state下拉列表。它在Create方法上工作正常,但我不能让它在Edit方法上工作。我在编辑时遇到此错误:

POST http://localhost/Submissions/Edit/SomeAJAXMethod 500 (Internal Server Error)

路径中有一个额外的/编辑,使其无效。它在Create上运行得很好。我试着添加〜/。我在创建和编辑方法上遇到了这些错误:

POST http://localhost/Submissions/Edit/~/SomeAJAXMethod 404 (Not Found)

我试图添加../。我在Create上遇到此错误,在编辑时工作正常:

POST http://localhost/SomeAJAXMethod 404 (Not Found)

如何让它同时适用于创建和编辑?

以下是我的控制器 //     // GET:/提交/创建

public ActionResult Create()
{
    ViewBag.ActivityRejectCodeId = GetRejectCodesByActivity(0);
    ViewBag.Activities = GetActivities();
    ViewBag.Workstations = GetWorkstationsByActivity(0);
    ViewBag.Platforms = GetPlatformsByWorkstation(0, 0);
    ViewBag.Parts = GetPartsByPlatform(0, 0, 0);
    ViewBag.StatusId = new SelectList(db.Status, "Id", "Name");
    ViewBag.Technicians = GetTechnicians(0);
    ViewBag.Shifts = GetShiftsByTechnician(0, 0);
    ViewBag.WorkOrderId = new SelectList(db.WorkOrders, "Id", "WO");

    return View();
}

//
// POST: /Submissions/Create

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(WorkOrderSubmission workordersubmission)
{
    var activityId = Int32.Parse(Request.Form["ActivityId"]);
    var workstationId = Int32.Parse(Request.Form["WorkstationId"]);
    var platformId = Int32.Parse(Request.Form["PlatformId"]);
    var partId = Int32.Parse(Request.Form["PartId"]);
    var techId = Int32.Parse(Request.Form["TechnicianId"]);
    var shiftId = Int32.Parse(Request.Form["ShiftId"]);

    if (ModelState.IsValid)
    {
        // Get the PlatformStageId from the combination of (ActivityId, WorkstationId, PlatformId, PartId)
        var rs = (from ps in db.PlatformStages
                  join wa in db.WorkstationActivities on ps.WorkstationActivityId equals wa.Id
                  join pp in db.PlatformParts on ps.PlatformPartId equals pp.Id
                  where ps.WorkstationActivity.ActivityId == activityId
                    && ps.WorkstationActivity.WorkstationId == workstationId
                    && ps.PlatformPart.PlatformId == platformId
                    && ps.PlatformPart.PartId == partId
                  select new {
                      ps.Id
                  }).FirstOrDefault();
        workordersubmission.PlatformStageId = rs.Id;

        // Get TechnicianShiftId from the combination of (TechnicianId, ShiftId)
        rs = (from ts in db.TechnicianShifts
              where ts.TechnicianId == techId
                && ts.ShiftId == shiftId
              select new
              {
                  ts.Id
              }).FirstOrDefault();
        workordersubmission.TechnicianShiftId = rs.Id;

        workordersubmission.SubmissionDate = DateTime.Now;

        db.WorkOrderSubmissions.Add(workordersubmission);
        db.SaveChanges();

        return RedirectToAction("Index");
    }

    ViewBag.ActivityRejectCodeId = new SelectList(db.ActivityRejectCodes, "Id", "RejectCodeId", workordersubmission.ActivityRejectCodeId);
    ViewBag.Activities = GetActivities(activityId);
    ViewBag.Workstations = GetWorkstationsByActivity(activityId, workstationId);
    ViewBag.Platforms = GetPlatformsByWorkstation(activityId, workstationId, platformId);
    ViewBag.Parts = GetPartsByPlatform(activityId, workstationId, platformId, partId);
    ViewBag.StatusId = new SelectList(db.Status, "Id", "Name", workordersubmission.StatusId);
    ViewBag.Technicians = GetTechnicians(techId);
    ViewBag.Shifts = GetShiftsByTechnician(techId, shiftId);
    ViewBag.WorkOrderId = new SelectList(db.WorkOrders, "Id", "WO", workordersubmission.WorkOrderId);

    return View(workordersubmission);
}

//
// GET: /Submissions/Edit/5

public ActionResult Edit(int id = 0)
{
    WorkOrderSubmission workordersubmission = db.WorkOrderSubmissions.Find(id);

    if (workordersubmission == null)
    {
        return HttpNotFound();
    }

    var platformStageId = workordersubmission.PlatformStageId;
    var technicianShiftId = workordersubmission.TechnicianShiftId;

    // Get ActivityId, WorkstationId, PlatformId, PartId from PlatformStageId
    var rs = (from ps in db.PlatformStages
              join wa in db.WorkstationActivities on ps.WorkstationActivityId equals wa.Id
              join pp in db.PlatformParts on ps.PlatformPartId equals pp.Id
              where ps.Id == platformStageId
              select new
              {
                  ActivityId = wa.ActivityId,
                  WorkstationId = wa.WorkstationId,
                  PlatformId = pp.PlatformId,
                  PartId = pp.PartId
              })
              .FirstOrDefault();

    ViewBag.Activities = GetActivities(rs.ActivityId);
    ViewBag.Workstations = GetWorkstationsByActivity(rs.ActivityId, rs.WorkstationId);
    ViewBag.Platforms = GetPlatformsByWorkstation(rs.ActivityId, rs.WorkstationId, rs.PlatformId);
    ViewBag.Parts = GetPartsByPlatform(rs.ActivityId, rs.WorkstationId, rs.PlatformId, rs.PartId);

    // Get TechnicianId, ShiftId from TechnicianShiftId
    var rs2 = (from ts in db.TechnicianShifts
          where ts.Id == technicianShiftId
          select new //TechnicianShift
          {
              TechnicianId = ts.TechnicianId,
              ShiftId = ts.ShiftId
          })
          .FirstOrDefault();

    ViewBag.Technicians = GetTechnicians(rs2.TechnicianId);
    ViewBag.Shifts = GetShiftsByTechnician(rs2.TechnicianId, rs2.ShiftId);

    ViewBag.ActivityRejectCodeId = new SelectList(db.ActivityRejectCodes, "Id", "RejectCodeId", workordersubmission.ActivityRejectCodeId);
    ViewBag.StatusId = new SelectList(db.Status, "Id", "Name", workordersubmission.StatusId);
    ViewBag.WorkOrderId = new SelectList(db.WorkOrders, "Id", "WO", workordersubmission.WorkOrderId);

    return View(workordersubmission);
}

//
// POST: /WorkorderSubmissions/Edit/5

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(WorkOrderSubmission workordersubmission)
{
    if (ModelState.IsValid)
    {
        db.Entry(workordersubmission).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    ViewBag.ActivityRejectCodeId = new SelectList(db.ActivityRejectCodes, "Id", "RejectCodeId", workordersubmission.ActivityRejectCodeId);
    ViewBag.PlatformStageId = new SelectList(db.PlatformStages.OrderBy(p => p.Name), "Id", "Name", workordersubmission.PlatformStageId);
    ViewBag.StatusId = new SelectList(db.Status, "Id", "Name", workordersubmission.StatusId);
    ViewBag.TechnicianShiftId = new SelectList(db.TechnicianShifts, "Id", "Description", workordersubmission.TechnicianShiftId);
    ViewBag.WorkOrderId = new SelectList(db.WorkOrders, "Id", "WO", workordersubmission.WorkOrderId);

    return View(workordersubmission);
}

以下是AJAX电话:

$(function () {
    // Code that triggers when there is a change in Activity drop down.
    $('#ActivityId').change(function () {
        var activityId = $(this).val();
        var url = 'GetRejectCodesByActivityJson';

        // Empty the Reject Code drop down list.
        $('#ActivityRejectCodeId').empty();

        // Empty the Workstation, Platform, Part drop downs.
        $('#WorkstationId').empty();
        $('#PlatformId').empty();
        $('#PartId').empty();

        $('.showhide-workstation').show();

        // AJAX call that re-populate Reject Code drop down depending on the Activity selected.
        $.ajax({
            type: 'POST',
            url: url,
            dataType: 'json',
            data: { activityId: activityId },
            success: function (codes) {
                $('#ActivityRejectCodeId').append('<option value=""></option>');
                $.each(codes, function (i) {
                    $('#ActivityRejectCodeId').append('<option value = "' + codes[i].Value + '">' + codes[i].Text + '</option>')
                });
            },
            error: function (ex) {
                $('#ActivityRejectCodeId').append('<option value=""></option>');
            }
        }); // END $.ajax() on GetRejectCodesByActivityJson

        url = 'GetWorkstationsByActivityJson';
        // AJAX call that re-populate Workstation drop down depending on the Activity selected.
        $.ajax({
            type: 'POST',
            url: url,
            dataType: 'json',
            data: { activityId: activityId },
            success: function (codes) {
                $('#WorkstationId').append('<option value=""></option>');
                $.each(codes, function (i) {
                    $('#WorkstationId').append('<option value = "' + codes[i].Value + '">' + codes[i].Text + '</option>');
                });
            },
            error: function (ex) {
                $('#WorkstationId').append('<option value=""></option>');
            }
        }); // END $.ajax() on GetRejectCodesByActivityJson
    }); // END $('#ActivityId').change()

    // Code that triggers when there is a change in Workstation drop down.
    $('#WorkstationId').change(function () {
        var activityId = $('#ActivityId').val();
        var workstationId = $(this).val();
        var url = 'GetPlatformsByWorkstationJson';

        // Empty the Platform, Part drop downs.
        $('#PlatformId').empty();
        $('#PartId').empty();

        $('.showhide-platform').show();

        // AJAX call that re-populate Platform drop down depending on the Workstation selected.
        $.ajax({
            type: 'POST',
            url: url,
            dataType: 'json',
            data: { activityId: activityId, workstationId: workstationId },
            success: function (codes) {
                $('#PlatformId').append('<option value=""></option>');
                $.each(codes, function (i) {
                    $('#PlatformId').append('<option value = "' + codes[i].Value + '">' + codes[i].Text + '</option>');
                });
            },
            error: function (ex) {
                $('#PlatformId').append('<option value=""></option>');
            }
        }); // END $.ajax() on GetPlatformsByWorkstationJson
    }); // END $('#WorkstationId').change()

0 个答案:

没有答案