View没有将模型传递给控制器​​ - ASP.Net MVC

时间:2017-08-03 13:14:50

标签: javascript c# asp.net asp.net-mvc

这是从视图到控制器的值的基本传递,但这并不寻求工作。当我单击用于更新数据库中的记录的更新按钮时,来自视图的值未正确传递值到控制器。将调试器放入javascript后,每个变量都能够正确获取其值并将对象存储在它们存储的位置。

这个问题可能是什么原因?

这是Javascript中的按钮onclick事件代码。

 $('#updatePrescription').click(function () {
        debugger;
        ValidateFields();
        var drugListIsEmpty = CheckDrugList();
        var error = $(".text-danger").length;


        if (error == 0 && !drugListIsEmpty) {
            debugger;
            var prescription = [];
            var template = {};

            template.templateName = $("#prescriptionTemplateName").val();
            template.templateTypeId = $('input[name=templateTypeId]:checked').val();
            template.prescriptionTemplateItemList = [];
            template.instructionId = $('.instruction').val();
            template.frequencyId = $('.frequency').val();
            template.day = $('.inputDays').val();
            template.quantity = $('.inputQuantity').val();
            template.dispenseLocationId = $('.selectDispenseLocation').val();
            template.statusId = $('.status').val();
            //template.categoryId = $('.templateCategory').filter(":visible").last().val();
            template.templateId = $('#prescriptionTemplateId').val();

            //if (template.categoryId == null) {
            //    template.categoryId = 0;
            //}

            var x = 0;
            $('#tblPrescriptionSaveTemplateBody tr').each(function (key, value) {
                debugger;
                var row = $(this).closest('tr');
                var next_row = $(row).next();
                var drugId = $(value).find('.drugId').val();
                var dosage = $(value).find('.inputDosage').val();
                var dosageUnitId = $(value).find('.selectUnitId').val();
                var statusId = "41";
                var remarks = $(value).find('.inputDescription').val();
                var groupId = $(value).find('.inputGroupNo').val();
                var unit = $(value).find('.selectUnitId').val();
                var prescriptionTemplateItemId = $(value).find('.prescriptionTemplateItemId').val();

                x++;

                var obj = {
                    // templateId: prescriptionTemplateId,
                    prescriptionTemplateId: template.templateId,
                    prescriptionTemplateItemId: prescriptionTemplateItemId,
                    drugId: drugId,
                    dosage: dosage,
                    dosageUnitId: dosageUnitId,
                    instructionId: template.instructionId,
                    frequencyId: template.frequencyId,
                    day: template.day,
                    quanitity: template.quantity,
                    unit: unit,
                    remarks: remarks,
                    dispenseLocationId: template.dispenseLocationId,
                    groupId: groupId,
                    statusId: template.statusId
                }
                template.prescriptionTemplateItemList.push(obj);
                //prescription.push(obj)

            })

            $.ajax({
                type: 'POST',
                url: '/WestMedicinePrescriptionTemplate/UpdateTemplate',
                dataType: 'json',
                contentType: 'application/json',
                data: JSON.stringify(template),
                success: function (data) {
                    ShowNotificationMessage(data.notification);
                    window.location.href = '/WestMedicinePrescriptionTemplate/Index';
                }
            });
        }
    });

预计会在控制器的参数“newtemplate”中传递模型的结果,但结果为null

  public ActionResult UpdateTemplate([FromBody] PrescriptionTemplateVM newtemplate)
        {
            int empId = Convert.ToInt32(HttpContext.Session.GetInt32("EmployeeId"));


            var notif = "Update Failed.";
            try
            {
                if (ModelState.IsValid)
                {
                    bool updateSuccessful = _prescription.UpdatePrescriptionTemplateAndItems(newtemplate, empId);

                    if (updateSuccessful)
                    {
                        notif = "Update Successful.";
                    }
                }
            }
            catch (Exception ex)
            {
                notif = ex.Message;
            }
            return Json(new { notification = notif });
        }

代码中的问题可能是什么

1 个答案:

答案 0 :(得分:1)

这样做:

[HttpPost]
public ActionResult UpdateTemplate(PrescriptionTemplateVM newtemplate)

您需要确保使用在PrescriptionTemplateVM中定义的相同变量名称

并且不要将数据转换为Json。这样做:

$.ajax({
            type: 'POST',
            url: '/WestMedicinePrescriptionTemplate/UpdateTemplate',
            dataType: 'json',
            contentType: 'application/json',
            data: {newtemplate: template},
            success: function (data) {
                ShowNotificationMessage(data.notification);
                window.location.href = 
             '/WestMedicinePrescriptionTemplate/Index';
            }
        });