使用 jscript 和控制器操作将数据添加到使用 MVC ASP.net 的数据库

Posted

技术标签:

【中文标题】使用 jscript 和控制器操作将数据添加到使用 MVC ASP.net 的数据库【英文标题】:Use jscript and controller actions to add data to database using MVC ASP.net 【发布时间】:2021-10-08 02:35:17 【问题描述】:

我需要将数据从我的 MVC ASP.net 项目保存到数据库,而不刷新视图页面。为此,我计划创建一个字符串并将其发送到控制器,然后发送到数据库。我已经做了一个函数来创建字符串...

function CreateChain() 

        RecordID = document.getElementById("RecordIdTextBox").value
        RecordDate = document.getElementById("RecordDateEntry").value
        Employee = document.getElementById("EmployeeTextBox").value
        Department = document.getElementById("ddlDepartmentsOption").value
        SubDepartment = document.getElementById("ddlSubDepartments").value
        Machine = document.getElementById("ddlMachines").value
        Equipment = document.getElementById("ddlEquipment").value
        Problem = document.getElementById("InvisibleProblemsddl").value
        Grade = document.getElementById("Gradeddl").value
        GradeComment = document.getElementById("GradeComment").value
        WorkOrderStatus = document.getElementById("WorkOrderStatus").value
        WorkOrderNumber = document.getElementById("WorkOrderNumber").value

        chain = ("RecordID:" + RecordID + ',' +
            "RecordDate:"+ RecordDate + ',' +
            "Employee:"+ Employee + ',' +
            "DepartmentID:"+ Department + ',' +
            "SubDepartmentID:"+ SubDepartment + ',' +
            "MachineID:"+ Machine + ',' +
            "EquipmentID:"+ Equipment + ',' +
            "ProblemID:"+ Problem + ',' +
            "Grade:"+ Grade + ',' +
            "GradeComment:"+ GradeComment + ',' +
            "WorkOrderStatus:"+ WorkOrderStatus + ',' +
            "WorkOrderNumber:"+ WorkOrderNumber)
        console.log(chain);

    

字符串的示例如下所示

RecordID:5,RecordDate:2021-08-02T13:50:46,Employee:Josh,DepartmentID:1,SubDepartmentID:1,MachineID:16,EquipmentID:141,ProblemID:59,Grade:A,GradeComment:the machine is working,WorkOrderStatus:true,WorkOrderNumber:123456

我怎样才能 1.) 将此字符串发送到控制器和 2.) 使用控制器将其发送到我的数据库?

所有数据点都对应我数据库中的表 RecordEntry 并且与给定的名称相同。

编辑: 这是我现在看到的功能。运行时它不会进入警报(链)。你知道为什么吗?被注释掉的另一个警报确实命中了。

编辑:我意识到你在函数中没有 ajax,我在那里做了。它是否应该在函数中,以便在按下提交按钮时调用它?

    function CreateChain() 

        //alert("running function createchain");

        Record = document.getElementById("RecordIdTextBox").value
        RecordDate = document.getElementById("RecordDateEntry").value
        Employee = document.getElementById("EmployeeTextBox").value
        Department = document.getElementById("ddlDepartmentsOption").value
        SubDepartment = document.getElementById("ddlSubDepartments").value
        Machine = document.getElementById("ddlMachines").value
        Equipment = document.getElementById("ddlEquipment").value
        Problem = document.getElementById("InvisibleProblemsddl").value
        Grade = document.getElementById("Gradeddl").value
        GradeComment = document.getElementById("GradeComment").value
        WorkOrderStatus = document.getElementById("WorkOrderStatus").value
        WorkOrderNumber = document.getElementById("WorkOrderNumber").value

        return 
            "RecordID": Record,
            "RecordDate": RecordDate,
            "Employee": Employee,
            "DepartmentID": Department,
            "SubDepartmentID": SubDepartment,
            "MachineID": Machine,
            "EquipmentID": Equipment,
            "ProblemID": Problem,
            "Grade": Grade,
            "GradeComment": GradeComment,
            "WorkOrderStatus": WorkOrderStatus,
            "WorkOrderNumber": WorkOrderNumber
        ;
    
        var chain = CreateChain();
        alert(chain);
        $.ajax(

            url: "/RecordEntries/AddtoDatabase",
            type: "POST",

            data:  model: chain ,

            success: function (result) 
                alert("Success");
            ,
            error: function (xhr, exception) 
                alert("Error");
            
        );
    

这是我的提交(下一步)按钮

<a class="btn btn-success btn-block btn-lg " onclick="NextButtonClick()" id="nextbutton"><font color="white">Next</font></a>

以及调用多个其他函数的函数。

    function NextButtonClick() 

        HideSelectionsBeforeNextSelection();
        ShowDropDownsAgain();
        //removefromList();
        ResetValues();
        IncreaseRecordIdByOne();
        CreateChain();
    

【问题讨论】:

您可以使用 JS "ajax" 调用发布表单...无需构建字符串。您的控制器会将表单数据绑定到控制器中的模型/类。 (我返回 JSON 以告诉 JS 在数据库更新完成后将什么加载到 DOM 中......在我的情况下,它是一个剃须刀页面减去布局内容) 有趣。我对此很陌生,并没有意识到可以做到这一点。您有可以分享的示例 ajax 函数吗? 您在网络、控制器和 json 的基础知识方面存在一些问题,我建议您阅读控制器工作原理的基础知识,因为您可以在您的设备上发送具有相同架构的 Json 对象控制器,它将自动投射到服务器上,然后您可以通过 fetch、jquery 或通过 javascript 的 httprequest 发送对象 我对网络、控制器和 json 的工作方式有相当的了解。我意识到我可以让我的字符串格式更好地作为 json 处理。我也意识到我可以向控制器发送一个 json。我只是不知道如何在控制器内部处理它。是否有一个简单的操作可以将 json 处理到数据库中? 您可以序列化标准表单数据:jQuery 示例:formresult = $('#' + formID).serialize() +'&otherparam=' + otherparam; $.post(destURL, formresult, function (data) .... )... 如果您要上传文件,只需使用 formdata: var formData = new FormData(thisForm);和 jQuery.ajax( 类型: 'POST', url: destURL, data: formData, ... , error: function (jqXHR, textStatus, error) .... ); 【参考方案1】:

试试这个

javasript

function CreateChain() 

        //alert("running function createchain");

      var  Record = document.getElementById("RecordIdTextBox").value;
       var  RecordDate = document.getElementById("RecordDateEntry").value;
        ........
var chain= 
            RecordID: Record,
            RecordDate: RecordDate,
           .....
        ;
    

        alert( JSON.stringify( chain));
        $.ajax(

            url: "/mycontroller/myaction",
            type: "POST",

            data:  model: chain ,

            success: function (result) 
                alert(result);
            ,
            error: function (xhr, exception) 
                alert("Error");
            
        );
    

服务器端

你必须创建视图模型

public class ChainViewModel

 public int RecordID get; set;
  public string  RecordDate get; set;
   public string  Employee get;set;
....and so on

控制器

public class MyController :Controller


public ActionResult MyAction( ChainViewModel model)

    ....use model data to submit to db

    return Ok("Success");



【讨论】:

@Three33Steele 你应该添加另一个 - return ....... "WorkOrderNumber": WorkOrderNumber ; 或者如果您只想使用一个功能,请查看我更新的答案 那么我需要在提交按钮按下时调用该 ajax 函数吗? 请出示您的提交按钮。您可以将其分成 2 个功能或作为一个功能使用。这取决于你 @Three33Steele 你已经得到了第一个问题的答案。正如我之前告诉你的——一个问题,一个答案。如果您在将数据保存到数据库时遇到问题,则必须发布另一个问题,答案应该非常大。

以上是关于使用 jscript 和控制器操作将数据添加到使用 MVC ASP.net 的数据库的主要内容,如果未能解决你的问题,请参考以下文章

Jscript 从网络中添加和删除打印机

将 MSIUSEREALADMINDETECTION 添加到 MSI 的脚本

将浮动操作按钮添加到选项卡栏控制器内的视图控制器

仅将操作过滤器添加到 [ApiController] 注释控制器的操作?

将TAB BAR添加到uitableviewcontroller [关闭]

Web API系列教程3.2 — 实战:处理数据(添加模型和控制器)