Вот мой AJAX запрос:AJAX сообщение запроса не возвращает JSON данных
var data = modalDom.find("form").serializeObject();
data["returnJson"] = true;
$.ajax({
type: "POST",
url: "/companies/edit/",
data: data,
dataType: "JSON",
success: function (result) {
modalDom.modal('hide');
var dropdown = $("#create-modal #CompanyID");
var currentSelected = dropdown.find("option:selected");
if (currentSelected.length) {
currentSelected.removeAttr("selected");
}
var newOption = '<option value="' + result.company.CompanyID + '">' + result.company.Name + '</option>';
dropdown.append(newOption);
dropdown.val(result.company.CompanyID);
}
});
А вот контроллер он бьет:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(Company company) {
if (CurrentUser.IsCompany(User)) {
return AjaxJsonResult.AuthFailResult();
}
if (!ModelState.IsValid) {
return AjaxJsonResult.FailResult(ModelState.Values.SelectMany(x => x.Errors).Select(x => x.ErrorMessage).ToList());
}
db.Company_CompanyType.RemoveRange(db.Company_CompanyType.Where(c => c.CompanyID == company.CompanyID));
if (Request.Params["CompanyTypes[]"] != null) {
var companyTypes = (from item in Request.Params["CompanyTypes[]"].Split(new[] {','})
select db.CompanyTypes.FirstOrDefault(c => c.Name == item)
into ct
where ct != null
select new Company_CompanyType() {
CompanyID = company.CompanyID, CompanyTypeID = ct.CompanyTypeID
}).ToList();
db.Company_CompanyType.AddRange(companyTypes);
}
if (company.CompanyID <= 0) {
db.Companies.Add(company);
}
else {
db.Entry(company).State = EntityState.Modified;
}
db.SaveChanges();
return AjaxJsonResult.SuccessResult("?companyID=" + company.CompanyID);
}
Я не могу получить доступ к любым свойства моего объекта JSON через переменную результата. Когда я регистрирую данные, которые я передаю в консоли, это правильные данные из формы. При регистрации переменной результата в консоли я получаю следующее:
Object {Success: true, RedirectTo: "?companyID=9818", Messages: null}
Что я делаю неправильно?
EDIT: Моя цель состоит в том, чтобы вернуть возвращаемые данные результата, представленные в форме. Пример: Метод
result.company.CompanyID = 1988
result.company.Name = "My Company Name"
Исходный код для AjaxJsonResult.SuccessResult():
public class AjaxJsonResult {
public bool Success { get; set; }
public string RedirectTo { get; set; }
public List<string> Messages { get; set; }
public static JsonResult SuccessResult(string redirectTo) {
var result = new AjaxJsonResult {
Success = true,
RedirectTo = redirectTo,
Messages = null
};
return ToJsonResult(result);
}
public static JsonResult ToJsonResult(AjaxJsonResult result, JsonRequestBehavior behavior = JsonRequestBehavior.AllowGet) {
return new JsonResult() {
Data = result,
ContentType = (string) null,
ContentEncoding = (Encoding) null,
JsonRequestBehavior = behavior
};
}
}
Можете ли вы привести пример того, что вы хотели бы получить в результате данные json? – elolos
@elolos Я внес некоторые изменения в свой оригинальный пост. Надеюсь, это сделает его более понятным. – mdk09
Спасибо, это разъясняет, чего вы пытаетесь достичь. Можете ли вы также опубликовать исходный код метода 'AjaxJsonResult.SuccessResult()'? – elolos