在 ASP.Net MVC 5 中将 javascript 数组从视图传递到控制器

Posted

技术标签:

【中文标题】在 ASP.Net MVC 5 中将 javascript 数组从视图传递到控制器【英文标题】:Passing javascript array from view to controller in ASP.Net MVC 5 【发布时间】:2020-06-10 02:26:04 【问题描述】:

我正在将数据从视图传递到控制器以发布到数据库,我正在使用实体框架的数据库优先方法,因此模型设置正常, 我有一个空数组var formArray = [];。来自输入字段的数据被捕获为

var OPDNo = $('[name= OPDNo]').val();
var Re = $('[name= re]').val();
var Le = $('[name= le]').val();

在我看来,我有输入变量,我已将它们放入 formData 作为

var formData = 
'OPDNo': OPDNo,
'VAFRE': Re,
'VAFLE': Le
;

OPDNo、Re、Le 都是输入字段。我正在使用 Ajax 传递数据,如下所示:

if (formData != null) 
                $.ajax(

                    url: '/EMR/SaveVisionScreening',
                    type: 'POST',
                    dataType: 'json',
                    contentType: 'application/json',
                    data: JSON.stringify( formArray: formData, selectValues: selectValues ),
                    success: function () 
                        showNotification("Record Saved Successfully", "info", true);

                    
                );
            

在我的控制器中,

[HttpPost]
        public void SaveVisionScreening(string formArray, string [] selectValues)
        
//Code...

         

当我调试时,控制器在 string formArray 上返回一个空值,我也设置了 ***traditional: true ** 但它仍然是空值。 我在这里检查了一些解决方案,但它并没有帮助我解决它。

【问题讨论】:

SaveVisionScreening(string OPDNo,string Re,string Le) 将此作为单个参数传递,并在 ajax 函数中进行更改 请给我一个 sn-p 代码作为您的建议 我传递了很多数据,超过 30 个,这就是我选择数组的原因 ok 然后 SaveVisionScreening(string [] formArray, string [] selectValues) 试试这个 string [] @Pravin 我已更改以适合您的建议,但它返回任何值,它仍然为空 【参考方案1】:

您可以创建一个代表您的输入的类,而不必有两个输入参数。例如,您可以像这样创建一个类:

 public class FormData
 
    public string OPDNo  get; set; 

    public string VAFRE  get; set; 

    public string VAFLE  get; set; 

    public string[] selectValues  get; set; 
 

然后像这样修改你的JS代码:

        var selectValues = [];
        selectValues.push('item1');
        selectValues.push('item2');

        var formData = 
            OPDNo: 'OPDNo',
            VAFRE: 'Re',
            VAFLE: 'Le',
            selectValues: selectValues
        ;

        $.ajax(

            url: '/home/SaveVisionScreening',
            type: 'POST',
            dataType: 'json',
            contentType: 'application/json',
            data: JSON.stringify(formData),
            success: function () 
                showNotification("Record Saved Successfully", "info", true);

            
        );

然后你的控制器方法是这样的:

   [HttpPost]
    public void SaveVisionScreening(FormData formData)
    


    

查看以下结果:

【讨论】:

感谢您的建议,尽管我应该提到我在实体框架中使用数据库优先方法 那与你的问题没有任何关系。也许你应该让我知道你为什么在这里谈论实体框架,因为你的问题是'如何将 javascript 数组从视图传递到控制器【参考方案2】:

我终于找到了出路,谢谢大家,我遇到了挑战,我做了更多的搜索,我找到了这个method,我认为分享很重要,所以就这样做了

对于我来说,我有

var formData = 
'OPDNo': OPDNo,
'VAFRE': Re,
'VAFLE': Le
;

声明一个变量来保存json形式的对象数据

var jsonData = JSON.stringify(formData);

通过执行以下操作使用 Ajax 处理数据:

 $.ajax(
     url: '/EMR/SaveVisionScreening',
     type: 'POST',
     dataType: 'JSON',
     contentType: 'application/json',
     data:  dataPost:jsonData, select
     success: function () 
     showNotification("Record Saved Successfully", "info",true);

     
  );

在您的控制器中,执行此操作

[HttPost]
public ActionResult SaveVisionScreening( string dataPost, string [] selectValues)

//Your code for deserializing the json objects goes here and saving data


很高兴知道传递的数据现在是 json 对象而不是数组,因此您应该使用 字符串数据类型

【讨论】:

以上是关于在 ASP.Net MVC 5 中将 javascript 数组从视图传递到控制器的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.Net MVC 5 中将 javascript 数组从视图传递到控制器

在 ASP.NET MVC 中将 FormsIdentity 替换为 WindowsIdentity

如何在 ASP.NET MVC 应用程序中将图像上传到 cloudinary?

在 ASP.NET MVC 中将数据传递到母版页

asp.net 5 MVC6 中标签助手和路由属性之间的奇怪行为

如何在 ASP.Net MVC 中将列表对象显示到视图中?