Asp.net mvc 带有制表器和Web API的HTTP POST

Asp.net mvc 带有制表器和Web API的HTTP POST,asp.net-mvc,asp.net-web-api,http-post,asp.net-ajax,tabulator,Asp.net Mvc,Asp.net Web Api,Http Post,Asp.net Ajax,Tabulator,我已经构建了一个web api,目前正在将数据仓库视图的内容返回到制表器区域,通过AJAX和api公开数据 我现在不知道如何获得在制表器中操作的数据并将其发布到我们的表dbo中。我不清楚如何在制表器中使用HTTP post方法,使用AJAX。没有太多的例子,我也相对缺乏经验 有人能帮我把我的物品从制表器表放到DWH表吗 控制器: using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; using BED_MGMT_

我已经构建了一个web api,目前正在将数据仓库视图的内容返回到制表器区域,通过AJAX和api公开数据

我现在不知道如何获得在制表器中操作的数据并将其发布到我们的表dbo中。我不清楚如何在制表器中使用HTTP post方法,使用AJAX。没有太多的例子,我也相对缺乏经验

有人能帮我把我的物品从制表器表放到DWH表吗

控制器:

 using System.Collections.Generic;
 using Microsoft.AspNetCore.Mvc;
 using BED_MGMT_WEBAPP.Models;
 using System.Linq;
 using Microsoft.EntityFrameworkCore;

namespace BED_MGMT_WEBAPP.Controllers
 {
     // route to the api controller
     [Route ("api/[controller]")]
     [ApiController]
     public class bed_data_Controller : ControllerBase
     {
         private readonly RealtimeFreqContext _bed_data;

         public bed_data_Controller(RealtimeFreqContext context) => _bed_data = context;

         // get api/values
         [HttpGet]
         public async System.Threading.Tasks.Task<ActionResult<IEnumerable<TblBaseBedmgmtBedsByWard>>> GetAsync()
         {
             {
             var b = _bed_data.TblBaseBedmgmtBedsByWard.FromSqlRaw<TblBaseBedmgmtBedsByWard>("SELECT * FROM [dbo].[vwBase_BEDS_BY_WARD]");
             return await  b.ToListAsync();
             }
         }

         // POST: api/bed_data
         // To protect from overposting attacks, please enable the specific properties you want to bind to, for
         // more details see https://aka.ms/RazorPagesCRUD.
         [HttpPost]
         public ActionResult<IEnumerable<TblBaseBedmgmtBedsByWard>> PostTblBaseBedmgmtBedsByWard(TblBaseBedmgmtBedsByWard postbeds)
         {
             if (!ModelState.IsValid)
                 return BadRequest("Invalid data.");

             using (var bedData = new RealtimeFreqContext())
             {
                 bedData.TblBaseBedmgmtBedsByWard.Add(new TblBaseBedmgmtBedsByWard()
                 {
                     ID = postbeds.ID,
                     Hospital = postbeds.Hospital,
                     WardCode = postbeds.WardCode,
                     Ward = postbeds.Ward,
                     RealtimeBedStock = postbeds.RealtimeBedStock,
                     ActualBedStock = postbeds.ActualBedStock,
                     AvailableBedsM = postbeds.AvailableBedsM,
                     AvailableBedsF = postbeds.AvailableBedsF,
                     AvailableBedsC = postbeds.AvailableBedsC,
                     TotalBedsClosed = postbeds.TotalBedsClosed,
                     ClosedAndUnoccupied = postbeds.ClosedAndUnoccupied,
                     EscalationBedsInUse = postbeds.EscalationBedsInUse,
                     DischargesConfirmedM = postbeds.DischargesConfirmedM,
                     DischargesConfirmedF = postbeds.DischargesConfirmedF,
                     DischargesConfirmedC = postbeds.DischargesConfirmedC,
                     DischargesPotentialM = postbeds.DischargesPotentialM,
                     DischargesPotentialF = postbeds.DischargesPotentialF,
                     DischargesPotentialC = postbeds.DischargesPotentialC,
                     AwaitingAdmissionAeM = postbeds.AwaitingAdmissionAeM,
                     AwaitingAdmissionAeF = postbeds.AwaitingAdmissionAeF,
                     AwaitingAdmissionAeC = postbeds.AwaitingAdmissionAeC,
                     AwaitingAdmissionInternalM = postbeds.AwaitingAdmissionInternalM,
                     AwaitingAdmissionInternalF = postbeds.AwaitingAdmissionInternalF,
                     AwaitingAdmissionInternalC = postbeds.AwaitingAdmissionInternalC,
                     AwaitingAdmissionExternalM = postbeds.AwaitingAdmissionExternalM,
                     AwaitingAdmissionExternalF = postbeds.AwaitingAdmissionExternalF,
                     AwaitingAdmissionExternalC = postbeds.AwaitingAdmissionExternalC,
                     AwaitingRepatriationIn = postbeds.AwaitingRepatriationIn,
                     AwaitingRepatriationOut = postbeds.AwaitingRepatriationOut,
                     OutliersMed = postbeds.OutliersMed,
                     OutliersSurg = postbeds.OutliersSurg,
                     OutliersOrth = postbeds.OutliersOrth,
                     StaffingShortages = postbeds.StaffingShortages,
                     UserCode = postbeds.UserCode,
                     DatetimeRecordInserted = postbeds.DatetimeRecordInserted
                 });

                 bedData.SaveChanges();
             }

             return Ok();

         }
     }
 }
我的HTML:

  <div id="example-table"></div>

</body>
<script>
       // tabulator start
 var tabledata = new Tabulator("#example-table", {
persistence:true, //enable table persistence
height: (window.innerHeight - 10),
ajaxURL: "api/bed_data_",
method: 'POST',
columns:[

{title:"Ward", 
    field:"ward", 
    frozen:true
},
{title:"Realtime Bed Stock", 
    field:"realtimeBedStock", 
    headerVertical:true, 
    frozen:true, 
    width:50
},
{title:"Actual Bed Stock", 
    field:"actualBedStock", 
    headerVertical:true, 
    width:50, 
    editor:"number"
},
    {//create column group
        title:"Available Beds",
            columns:[
            {title:"Male", 
                field:"availableBedsM", 
                align:"center", 
                headerVertical:true,  
                width:50, editor:"number"},
             {title:"Female", 
                field:"availableBedsF", 
                align:"center", 
                headerVertical:true, 
                width:50, 
                editor:"number"},
            {title:"Cubicle", 
                field:"availableBedsC", 
                align:"center", 
                headerVertical:true, 
                width:50, 
                editor:"number"},
            ],
    },

{title:"Total Beds Closed", 
    field:"totalBedsClosed", 
    align:"center", 
    headerVertical:true, 
    width:50, 
    editor:"number"},
{title:"Closed And Unoccupied", 
    field:"closedAndUnoccupied", 
    align:"center", 
    headerVertical:true, 
    width:50, 
    editor:"number"},
{title:"Escalation Beds In Use", 
    field:"escalationBedsInUse", 
    align:"center", 
    headerVertical:true, 
    width:50, 
    editor:"number"},

    {//create column group
        title:"Discharges Confirmed",
            columns:[
                {title:"Male", 
                    field:"dischargesConfirmedM", 
                    align:"center", 
                    headerVertical:true,  
                    width:50, 
                    editor:"number"},
                {title:"Female", 
                    field:"dischargesConfirmedF", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                {title:"Cubicle", 
                    field:"dischargesConfirmedC", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                ],
        },

     {//create column group
        title:"Potential Discharges",
            columns:[
                {title:"Male", 
                    field:"dischargesPotentialM", 
                    align:"center", 
                    headerVertical:true,  
                    width:50, 
                    editor:"number"},
                {title:"Female", 
                    field:"dischargesPotentialF", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                {title:"Cubicle", 
                field:"dischargesPotentialC", 
                align:"center", 
                headerVertical:true, 
                width:50, 
                editor:"number"},
        ],
    },

    {//create column group
        title:"Awaiting Admission AE",
            columns:[
                {title:"Male", 
                    field:"awaitingAdmissionAeM", 
                    align:"center", 
                    headerVertical:true,  
                    width:50, 
                    editor:"number"},
                {title:"Female", 
                    field:"awaitingAdmissionAeF", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                {title:"Cubicle", 
                    field:"awaitingAdmissionAeC", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                ],
        },

    {//create column group
        title:"Awaiting Admission Internal",
            columns:[
                {title:"Male", 
                    field:"awaitingAdmissionInternalM", 
                    align:"center", 
                    headerVertical:true,  
                    width:50, 
                    editor:"number"},
                {title:"Female", 
                    field:"awaitingAdmissionInternalF", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                {title:"Cubicle", 
                    field:"awaitingAdmissionInternalC", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                ],
        },

    {//create column group
        title:"Awaiting Admission External",
            columns:[
                {title:"Male", 
                    field:"awaitingAdmissionExternalM", 
                    align:"center", 
                    headerVertical:true,  
                    width:50, 
                    editor:"number"},
                {title:"Female", 
                    field:"awaitingAdmissionExternalF", 
                    align:"center",  
                    headerVertical:true,
                    width:50, 
                    editor:"number"},
                {title:"Cubicle", 
                    field:"awaitingAdmissionExternalC", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
        ],
    },

    {//create column group
        title:"Awaiting Repatriation",
            columns:[
                {title:"IN", 
                    field:"awaitingRepatriationIn", 
                    align:"center", 
                    headerVertical:true,  
                    width:50, 
                    editor:"number"},
                {title:"OUT", 
                    field:"awaitingRepatriationOut", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                ],
        },

    {//create column group
        title:"Outliers",
            columns:[
                {title:"Medical", 
                    field:"outliersMed", 
                    align:"center", 
                    headerVertical:true,  
                    width:50, 
                    editor:"number"},
                {title:"Surgical", 
                    field:"outliersSurg", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                {title:"Ortho", 
                    field:"outliersOrth", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
        ],
    },

    {title:"Staffing Shortages", 
        field:"staffingShortages", 
        align:"left", 
        width:250, 
        editor:"input"},

    ],
 });
 </script>
 </html>

//制表机起动
var tabledata=新制表器(“示例表”{
持久性:true,//启用表持久性
高度:(窗内高度-10),
ajaxURL:“api/bed\u数据”,
方法:“POST”,
栏目:[
{标题:“病房”,
字段:“病房”,
冻结:对
},
{标题:“实时床品”,
字段:“realtimebestock”,
校长:是的,
冻结:是的,
宽度:50
},
{标题:“实际床位存量”,
字段:“实际库存”,
校长:是的,
宽度:50,
编者:《数字》
},
{//创建列组
标题:“可用床位”,
栏目:[
{标题:“男性”,
字段:“availableBedsM”,
对齐:“居中”,
校长:是的,
宽度:50,编辑:“数字”},
{标题:“女性”,
字段:“availableBedsF”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
{标题:“隔间”,
字段:“availableBedsC”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
],
},
{标题:“已关闭的床位总数”,
字段:“总计已关闭”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
{标题:“关闭和未占用”,
字段:“关闭未占用”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
{标题:“使用中的升级床”,
字段:“EscalationBedInuse”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
{//创建列组
标题:“确认出院”,
栏目:[
{标题:“男性”,
字段:“放电确认DM”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
{标题:“女性”,
字段:“放电确认DF”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
{标题:“隔间”,
字段:“放电确认DC”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
],
},
{//创建列组
标题:“潜在放电”,
栏目:[
{标题:“男性”,
字段:“放电电位”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
{标题:“女性”,
字段:“放电电位”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
{标题:“隔间”,
字段:“放电电位”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
],
},
{//创建列组
标题:“等待入学AE”,
栏目:[
{标题:“男性”,
字段:“等待许可”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
{标题:“女性”,
字段:“等待批准”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
{标题:“隔间”,
字段:“等待许可AEC”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
],
},
{//创建列组
标题:“等待录取内部”,
栏目:[
{标题:“男性”,
字段:“等待许可内部M”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
{标题:“女性”,
字段:“等待许可内部F”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
{标题:“隔间”,
字段:“等待内部许可”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
],
},
{//创建列组
标题:“等待入学”,
栏目:[
{标题:“男性”,
字段:“等待许可证外部消息”,
对齐:“居中”,
校长:是的,
宽度:50,
编辑:“数字”},
{标题:“女性”,
字段:“WaitingAdministrationExternalF”,
对齐:“居中”,
校长:是的,
 using System;
 using Microsoft.EntityFrameworkCore;
 using Microsoft.EntityFrameworkCore.Metadata;

 namespace BED_MGMT_WEBAPP.Models
 {
    public partial class RealtimeFreqContext : DbContext
     {
         public RealtimeFreqContext()
         {
         }

         public RealtimeFreqContext(DbContextOptions<RealtimeFreqContext> options)
             : base(options)
         {
         }

         public virtual DbSet<TblBaseBedmgmtBedsByWard> TblBaseBedmgmtBedsByWard { get; set; }

         protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
         {
             if (!optionsBuilder.IsConfigured)
             {
 //#warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.

 optionsBuilder.UseSqlServer("Server=ourserver;Database=ourdb;IntegratedSecurity=true;");
             }
         }
 using System;
 using System.Collections.Generic;

 namespace BED_MGMT_WEBAPP.Models
 {
     public partial class TblBaseBedmgmtBedsByWard
     {
         public int ID { get; set; }
         public string Hospital { get; set; }
         public string WardCode { get; set; }
         public string Ward { get; set; }
         public int? RealtimeBedStock { get; set; }
         public int? ActualBedStock { get; set; }
         public int? AvailableBedsM { get; set; }
         public int? AvailableBedsF { get; set; }
         public int? AvailableBedsC { get; set; }
         public int? TotalBedsClosed { get; set; }
         public int? ClosedAndUnoccupied { get; set; }
         public int? EscalationBedsInUse { get; set; }
         public int? DischargesConfirmedM { get; set; }
         public int? DischargesConfirmedF { get; set; }
         public int? DischargesConfirmedC { get; set; }
         public int? DischargesPotentialM { get; set; }
         public int? DischargesPotentialF { get; set; }
         public int? DischargesPotentialC { get; set; }
         public int? AwaitingAdmissionAeM { get; set; }
         public int? AwaitingAdmissionAeF { get; set; }
         public int? AwaitingAdmissionAeC { get; set; }
         public int? AwaitingAdmissionInternalM { get; set; }
         public int? AwaitingAdmissionInternalF { get; set; }
         public int? AwaitingAdmissionInternalC { get; set; }
         public int? AwaitingAdmissionExternalM { get; set; }
         public int? AwaitingAdmissionExternalF { get; set; }
         public int? AwaitingAdmissionExternalC { get; set; }
         public int? AwaitingRepatriationIn { get; set; }
         public int? AwaitingRepatriationOut { get; set; }
         public int? OutliersMed { get; set; }
         public int? OutliersSurg { get; set; }
         public int? OutliersOrth { get; set; }
         public string StaffingShortages { get; set; }
         public string UserCode { get; set; }
         public DateTime? DatetimeRecordInserted { get; set; }
     }
 }
  <div id="example-table"></div>

</body>
<script>
       // tabulator start
 var tabledata = new Tabulator("#example-table", {
persistence:true, //enable table persistence
height: (window.innerHeight - 10),
ajaxURL: "api/bed_data_",
method: 'POST',
columns:[

{title:"Ward", 
    field:"ward", 
    frozen:true
},
{title:"Realtime Bed Stock", 
    field:"realtimeBedStock", 
    headerVertical:true, 
    frozen:true, 
    width:50
},
{title:"Actual Bed Stock", 
    field:"actualBedStock", 
    headerVertical:true, 
    width:50, 
    editor:"number"
},
    {//create column group
        title:"Available Beds",
            columns:[
            {title:"Male", 
                field:"availableBedsM", 
                align:"center", 
                headerVertical:true,  
                width:50, editor:"number"},
             {title:"Female", 
                field:"availableBedsF", 
                align:"center", 
                headerVertical:true, 
                width:50, 
                editor:"number"},
            {title:"Cubicle", 
                field:"availableBedsC", 
                align:"center", 
                headerVertical:true, 
                width:50, 
                editor:"number"},
            ],
    },

{title:"Total Beds Closed", 
    field:"totalBedsClosed", 
    align:"center", 
    headerVertical:true, 
    width:50, 
    editor:"number"},
{title:"Closed And Unoccupied", 
    field:"closedAndUnoccupied", 
    align:"center", 
    headerVertical:true, 
    width:50, 
    editor:"number"},
{title:"Escalation Beds In Use", 
    field:"escalationBedsInUse", 
    align:"center", 
    headerVertical:true, 
    width:50, 
    editor:"number"},

    {//create column group
        title:"Discharges Confirmed",
            columns:[
                {title:"Male", 
                    field:"dischargesConfirmedM", 
                    align:"center", 
                    headerVertical:true,  
                    width:50, 
                    editor:"number"},
                {title:"Female", 
                    field:"dischargesConfirmedF", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                {title:"Cubicle", 
                    field:"dischargesConfirmedC", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                ],
        },

     {//create column group
        title:"Potential Discharges",
            columns:[
                {title:"Male", 
                    field:"dischargesPotentialM", 
                    align:"center", 
                    headerVertical:true,  
                    width:50, 
                    editor:"number"},
                {title:"Female", 
                    field:"dischargesPotentialF", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                {title:"Cubicle", 
                field:"dischargesPotentialC", 
                align:"center", 
                headerVertical:true, 
                width:50, 
                editor:"number"},
        ],
    },

    {//create column group
        title:"Awaiting Admission AE",
            columns:[
                {title:"Male", 
                    field:"awaitingAdmissionAeM", 
                    align:"center", 
                    headerVertical:true,  
                    width:50, 
                    editor:"number"},
                {title:"Female", 
                    field:"awaitingAdmissionAeF", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                {title:"Cubicle", 
                    field:"awaitingAdmissionAeC", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                ],
        },

    {//create column group
        title:"Awaiting Admission Internal",
            columns:[
                {title:"Male", 
                    field:"awaitingAdmissionInternalM", 
                    align:"center", 
                    headerVertical:true,  
                    width:50, 
                    editor:"number"},
                {title:"Female", 
                    field:"awaitingAdmissionInternalF", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                {title:"Cubicle", 
                    field:"awaitingAdmissionInternalC", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                ],
        },

    {//create column group
        title:"Awaiting Admission External",
            columns:[
                {title:"Male", 
                    field:"awaitingAdmissionExternalM", 
                    align:"center", 
                    headerVertical:true,  
                    width:50, 
                    editor:"number"},
                {title:"Female", 
                    field:"awaitingAdmissionExternalF", 
                    align:"center",  
                    headerVertical:true,
                    width:50, 
                    editor:"number"},
                {title:"Cubicle", 
                    field:"awaitingAdmissionExternalC", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
        ],
    },

    {//create column group
        title:"Awaiting Repatriation",
            columns:[
                {title:"IN", 
                    field:"awaitingRepatriationIn", 
                    align:"center", 
                    headerVertical:true,  
                    width:50, 
                    editor:"number"},
                {title:"OUT", 
                    field:"awaitingRepatriationOut", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                ],
        },

    {//create column group
        title:"Outliers",
            columns:[
                {title:"Medical", 
                    field:"outliersMed", 
                    align:"center", 
                    headerVertical:true,  
                    width:50, 
                    editor:"number"},
                {title:"Surgical", 
                    field:"outliersSurg", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
                {title:"Ortho", 
                    field:"outliersOrth", 
                    align:"center", 
                    headerVertical:true, 
                    width:50, 
                    editor:"number"},
        ],
    },

    {title:"Staffing Shortages", 
        field:"staffingShortages", 
        align:"left", 
        width:250, 
        editor:"input"},

    ],
 });
 </script>
 </html>
async function updateServerAll(){
    const data = table2.getData();
    const url = 'api/bed_data';
    const fetchOptions = {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json'
    },
    body: JSON.stringify(data)
  };
  const res = await fetch(url, fetchOptions);
  const ret = await res.json();
}