这是我要提交的表格
@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中,这是不对的。
答案 0 :(得分:1)
您在HTML中拥有的值将被视为字符串值,因为没有多个值传递给控制器。您只传递一个值。您需要更改方法签名并使用string arr
并将其值作为字符串。然后在服务器上进行转换。
此外,与其手动提交表单,不如使用Javascript和AJAX提交数据更好。然后,您可以在请求正文中将arr
的值作为JSON传递。然后,它将自动转换为数组。