如何将JavaScript数组作为文章的一部分传递给ASP.NETMVC操作

How to pass a JavaScript Array to ASP.Net MVC Action as part of post

本文关键字:一部分 ASP 操作 NETMVC 文章 JavaScript 数组      更新时间:2023-09-26

我有一个如下的cshtml,

DoPost.cshtml

@using (Html.BeginForm("Purchase", "PurchaseOrder", FormMethod.Post, new { @id = "frmPurchase" }))
{
// statements
// statements
<input type="button" id="submitPurchase" onclick = "myPurchase()" value="Select" />
}

Javascript中,我在变量"ExtraItems"中有一个数组字符串

ExtraItems[0] ="123"
ExtraItems[1] ="124"
ExtraItems[2] ="125"

我接受数据的行动如下,

public ActionResult Purchase(PurchaseOrderModel model)
        {            
            //Do some stuff with the passed data
            return View("Purchase", model);
        }

在上面的PurchaseOrderModel中,我具有属性

public string[] SelectedProducts { get; set; }

以接受Javascript数组元素。

我尝试过的:简单的帖子不起作用,因为JavaScript数组元素不是Form元素的一部分,我不能使用@Html.HiddenFor,因为它是一个数组。

因此,尝试在函数myPurchase()、下发布Ajax

$a.post('@Url.Action("Purchase", "PurchaseOrder")', { SelectedProducts: ExtraItems });

在这里,我没有在操作中获得model.SelectedProducts下的ExtraItems详细信息。最大的问题是我想从操作中加载Purchase.cshtml视图,但我把控件放回了Jquery Post。

请帮我怎么解决这个问题。

您应该将javascript数组作为json对象发布。您可以使用JSON.stringify((方法将值转换为JSON。类似于:

 $.ajax({
        url: '@Url.Action("Purchase", "PurchaseOrder")',
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify({ 
            SelectedProducts: ExtraItems
        })
    });
Here is my example for solving your issue
-----------------------------------------
//Script
@{
    ViewBag.Title = "Index";
}
<h2>Index</h2>
<script>
    var ExtraItems = ["aa","bb","cc","ff"];
    function a()
    {
        $.ajax( {
            type: 'POST',
            url: '/Default1/Index',
            data: { SelectedProducts: ExtraItems },
            traditional: true,
            success: function ( response )
            {
                alert( 'Sucs' );

            }
        } );
    }
</script>
<button onclick="a();">click</button>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.js"></script>

//控制器

 [HttpPost]
        public ActionResult Index( string[] SelectedProducts )
        {
              return View();
        }

在模型中获取字符串属性,然后以逗号分隔的字符串发送数据

var dataToSent = ExtraItems.join(',')

如果您的Purchase模型中有一个名为Datum的string类型的属性,则要发送的数据将通过模型

data : 'Datum=' + dataToSent

在操作中,您可以将数据拆分为数组对于返回响应,您必须在ajax调用的success函数中重定向页面

$.ajax( {
        type: 'POST',
        url: '/Default1/Index',
        data: { SelectedProducts: ExtraItems },
        traditional: true,
        success: function ( response )
        {
            window.location.href = "/controller/action" <--your url

        }
    } );

使用带有选项traditional:true$.ajax函数为字符串项列表启用ASP.NET MVC默认模型绑定。