【发布时间】:2017-02-21 15:29:05
【问题描述】:
我有三门课
public class MainSearch
{
public MainSearch()
{
SearchData searchData = new SearchData();
SearchMode searchMode = new SearchMode();
}
public SearchData searchData { get; set; }
public SearchMode searchMode { get; set; }
public int? page { get; set; }
public object ToPagedListParameters(int pagenumber)
{
searchMode.pageNumber = pagenumber;
return page;
}
public IList<string> ValidationErrorMessages { get; set; }
}
public class SearchData
{
// Fields used for the ticket number search
public int? ticketNumberCompare { get; set; }
public string ticketSearchTextFrom { get; set; }
public string ticketSearchTextTo { get; set; }
}
public class SearchMode
{
public int? mode { get; set; }
public int? pageNumber { get; set; }
public int? pageSize { get; set; }
public string sortDirection { get; set; }
public string sortField { get; set; }
public string userURN { get; set; }
public string __RequestVerificationToken { get; set; }
}
以下是我的控制器代码:
[HttpGet]
public ActionResult DownloadFileCSV(MainSearch search)
{
string fileName = Server.MapPath("~/Content/Pdf/") + "somefile.pdf";
byte[] fileContents = System.IO.File.ReadAllBytes(fileName);
return File(fileContents, "application/pdf", "result.pdf");
}
最后,从 cshtml 文件进行的 Ajax 调用。
$("#DownloadAttachmentCSV").click(function () {
$.ajax(
{
url: '@Url.Action("DownloadFileCSV", "Home")',
contentType: 'application/json; charset=utf-8',
datatype: 'json',
data: JsonData,
type: "GET",
success: function () {
window.location = '@Url.Action("DownloadFileCSV", "Home")' + '?' + JsonData;
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
});
上面的代码确实有效,并且下载了测试文件 somefile.pdf。
我的问题:
在控制器中,我期望 MainSearch 对象被填充。目前没有发生这种情况。检查类 SearchData 和 SearchMode 是否设置为 null。
我该如何解决这个问题?
抱歉,忘记添加 Json。
var JsonData = {
"searchMode":
{
"mode": "1",
"pageSize": "5",
"pageNumber": "1",
"sortField": "PodRef",
"sortDirection": "desc",
"userURN": "3175",
},
"searchData":
{
"ticketNumberCompare": "1",
"ticketSearchTextFrom": "From A",
"ticketSearchTextTo": "To Z"
}
};
【问题讨论】:
-
你试过
data: { "search": JsonData }吗? -
是的,我有,但它什么也没做
-
我刚刚意识到您似乎调用了两次相同的操作方法(一次通过 Ajax,一次通过 window.location)。为什么是这样?当然只需要第二次调用。而对于第二个,您不能将这样的 JSON 数据直接提交到查询字符串中。你最好序列化对象。
-
这是 Ajax 调用返回文件的 MVC 控制器操作的怪癖。请看链接stackoverflow.com/questions/30704078/…
标签: javascript jquery json ajax asp.net-mvc-4