-1
我有一个输入表单,它使用与此类似的模型呈现。为了清晰起见,我试图简化示例。使用jquery ajax post将数组传递给控制器失败
[Serializable]
public class OrderDetailsModel
{
public string FirstName { get; set; }
public string Surname { get; set; }
public Address[] OrderAddresses { get; set; }
}
[Serializable]
public class Address
{
public string BuildingNameNumber { get; set; }
public string Town { get; set; }
public string Postcode { get; set; }
}
它使用类似于此
<form id="orderForm">
<div>
@Html.LabelFor(model => model.FirstName)
</div>
<div>
@Html.EditorFor(model => model.FirstName)
</div>
<div>
@Html.LabelFor(model => model.Surname)
</div>
<div>
@Html.EditorFor(model => model.Surname)
</div>
@for (int i = 0; i < 3; i++)
{
var addressDisplayDivId = $"addressDisplay{i}";
<div id="@addressDisplayDivId">
<div>
@Html.LabelFor(model => model.OrderAddresses[i].BuildingNameNumber)
</div>
<div>
@Html.EditorFor(model => model.OrderAddresses[i].BuildingNameNumber, new {@id = $"buildingNameNumber{i}"})
</div>
<div>
@Html.LabelFor(model => model.OrderAddresses[i].Town)
</div>
<div>
@Html.EditorFor(model => model.OrderAddresses[i].Town, new {@id = $"town{i}"})
</div>
<div>
@Html.LabelFor(model => model.OrderAddresses[i].Postcode)
</div>
<div>
@Html.EditorFor(model => model.OrderAddresses[i].Postcode, new {@id = $"postcode{i}"})
</div>
</div>
}
<a href="/MyController/ActionMethod" id="submit">Submit</a>
</form>
我试图使用jQuery AJAX
$("#submit").click(function(e) {
e.preventDefault();
var submitUrl = $("#submit").attr("href");
var model = $("#orderForm").serialize();
$.ajax({
type: "POST",
url: submitUrl,
data: model,
success: function(result) {
alert("Success");
},
error: function(result) {
alert("Error");
}
});
});
到一个控制器动作
public MyController
{
public ActionResult ActionMethod(OrderDetailsModel model)
{
}
}
发布形式剃刀标记呈现
问题是米y行动没有被调用。如果我删除了地址[],那么它可以正常工作,但在模型中引入这种复杂性似乎可以防止帖子发挥作用。
这个问题似乎存在于jquery序列化以及如何在发布到动作之前构造Address阵列。
任何人都可以提出一个处理这个问题的方法吗?
当我测试它时,此代码适合我。我想你错过了一些重要的细节,这是造成差异。 –
你在哪里遇到异常?呼叫是否落入“错误”回调?网络选项卡显示的是对ajax呼叫的响应? – ADyson
'我/ ActionMethod'' - 删除'控制器' - 我假设它真的是'公共类MyController:Controller' –