要从MVC中的视图到控制器获取数组的属性?

时间:2019-07-03 08:45:48

标签: javascript arrays asp.net-mvc

这是我要提交的表格

@using (Html.BeginForm("SigningAsync", "Signing", FormMethod.Post,
    new { onsubmit = "return confirm('Do you really want to submit the form?');"}))
    {
        <div class="col-md-6 col-sm-12 form-group" style="margin-bottom:5px !important">
            <input type="submit"
                   id="btnConf"
                   name="Sign" value="Confirm"
                   class="btn btn-primary pull-right" style="margin-right:2px" />
            <div class="form-group">
                <input type="hidden" id="arr" name="arr" />
            </div>

        </div>
    }

<input type="checkbox" value="@masterData.DocNo" name="selected" class="inforID" id="@masterData.NewDocNo" plant="@masterData.Plant" flowno="@masterData.FlowNo"/>

选中复选框并按下确认按钮后,我将属性从复选框输入到arr

$(document).ready(function() {
    $("#btnConf").click(function () {

        var selected = [];
        $.each($("input[name='selected']:checked"), function () {
            selected.push({
                DocNo: $(this).val(),
                NewDocNo: $(this).attr("id"),
                Plant: $(this).attr("plant"),
                FlowNo: $(this).attr("flowno")
            });
            document.getElementById("arr").value = JSON.stringify(selected);
        });
        console.log(JSON.stringify(selected));
    });
});

输入arr会这样

<div class="form-group">
    <input type="hidden" id="arr" name="arr" value="[
        {"DocNo":"100400020719-006","NewDocNo":"ABS-02072019","Plant":"VDNF","FlowNo":"FLW-000001"},
        {"DocNo":"100400020719-007","NewDocNo":"ABS-02072019","Plant":"VDNF","FlowNo":"FLW-000001"}
    ]">
</div>

这是动作

public async Task<ActionResult> SigningAsync([Bind(Include = "arr")] PurchaseRequestViewModel purchaseRequestViewModel, string Sign, string[] arr)
{
    bool result = false;
    if(arr != null)
    {
        if (ModelState.IsValid && !String.IsNullOrWhiteSpace(Sign))
        {
            for(int i = 0; i < arr.Length; i++)
            {
              string test = a[i].NewDocNo;
            }
        }
    }
}

我无法获得arr中对象的属性,我已经尝试过string test = a[i][NewDocNo];string test = a[i]["NewDocNo"];。 但这是不对的。如何在Controller中获取数组的属性?

我已经用Javascript尝试过console.log(selected[0].NewDocNo);,没关系,但是在Controller中,这是不对的。

1 个答案:

答案 0 :(得分:1)

您在HTML中拥有的值将被视为字符串值,因为没有多个值传递给控制器​​。您只传递一个值。您需要更改方法签名并使用string arr并将其值作为字符串。然后在服务器上进行转换。

此外,与其手动提交表单,不如使用Javascript和AJAX提交数据更好。然后,您可以在请求正文中将arr的值作为JSON传递。然后,它将自动转换为数组。