У меня есть три классаСоздание HTTP Получить вызов от Ajax к контроллеру MVC, параметр представляет собой сложный объект Json показывает утратившим
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");
}
И, наконец, , вызов Ajax, созданный из файла cshtml.
$("#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} '? – ADyson
Да, у меня есть и ничего не делает – gilesrpa
Я только что понял, что вы вызываете один и тот же метод действий дважды (один раз через Ajax и один раз через window.location). Почему это? Конечно, требуется только второй вызов. А для второго вы не можете передавать данные JSON прямо в запрос. Вам лучше сериализовать объект. – ADyson