【发布时间】:2018-06-13 07:28:31
【问题描述】:
鉴于我收到了HistorySearch 类型的模型。然后我想使用ajax将此模型重新发送到控制器:
$("#exportCsv").click(function () {
// get model as json
var searchData = '@Html.Raw(Json.Encode(@Model))';
searchData = JSON.stringify({ 'search': searchData });
$.ajax({
//contentType: 'application/json; charset=utf-8',
url: '@Url.Action("ExportToCsv", "BankCosts")',
type: 'POST',
data: searchData,
dataType: 'json',
error: function (xhr) {
alert('Error: ' + xhr.statusText);
},
async: true,
});
});
如您所见,我不得不评论 contentType,因为出于某种原因,此传递的模型在控制器中设置为 null。
另外,我的控制器是这样编码的:
[HttpPost]
public void ExportToCsv(HistorySearch search)
{
// search properties are not filled. They are set to default value
}
事情是绑定没有正常工作。收到的search 属性设置为默认值。怎么了?
【问题讨论】:
-
您需要将视图内容包装在一个表单中。序列化然后提交。从您的 ajax 调用中删除 dataType 表示法。这是您期望返回的数据类型.. 无效.. 不是 json。保留内容类型。现在默认为 application/x-www-form-urlencoded; charset=UTF-8 这正是你所需要的。
-
删除
@Html.Raw()周围的引号 - 但是发送回您刚刚发送到视图的完全相同的模型到底有什么意义 -
您发回的模型与您发送到视图中的模型完全相同,而不是编辑过的值!
-
再一次,您将发送回控制器刚刚发送到视图的确切内容 - 这完全没有意义!如果你想发回表单的值,那么它的
data: $('form').serialize(), -
第二个对象是什么?我们不知道你的模型是什么形式是什么
标签: javascript asp.net ajax asp.net-mvc