2016-04-21 7 views
2

Я использую MVC архитектуры, я имею форму POST как Bootstrap Modal, которые крепят его данные формы после того, как отправить на AJAX вызоваконтроллер возвращает необработанный объект JSON в целях

$.ajax({ 
    type: "POST", 
    url: action, 
    enctype: "multipart/form-data", 
    data: dataString, 
    cache: false, 
    contentType: contentType, 
    processData: processData, 
    beforeSend: function() { 
     block('#mymodal'); 
    }, 
    success: function (data, status, xhr) { console.log("success ajax"); onAjaxSuccess(xhr, status, '#mymodal') }, 
    error: function (xhr, status) { console.log("error ajax"); onAjaxFailed(xhr, status, error, '#error-div') }, 
    complete: function (xhr, status) { console.log("complete ajax"); onAjaxComplete(xhr, status, '#mymodal', '#alert', '#myModal') } 
}); 

где действие является Метод контроллера, где он проходит необходимые данные, CONTENTTYPE и ProcessData оба ложный

этого вызова Ajax работает нормально и направляет вызов в контроллер правильно

public ActionResult MyCtroller(myViewModel model) 
{ 
    //processing stuff 

    JsonResultObject result = new JsonResultObject(); 

    try 
    { 
     //return secess 
    } 
    catch (Exception ex) 
    { 
     //return error 
    } 

    SearchCriteria<MyModel> viewModel = new SearchCriteria<MyModel>(); 
    viewModel.SortExpression = m => m.OrderByDescending(a => a.Date); 
    SearchResult<MyModel> searchResult = MyModelService.Instance.Search(viewModel); 

    result.PartialViewHtml = RenderPartialViewToString("PartialView.cshtml", searchResult); 


    return Json(result)); 
} 

после завершения обработки, и настало время, чтобы вернуться на странице распечатать результат как чистый JSON с частичным видом в этом формате JSON в качестве объекта, вместо оказания PartialView и успеха, полного, ошибка в Аякс вызов ранее не дозвонились

{ 
    "IsRedirect": false, 
    "RedirectUrl": null, 
    "Success": true, 
    "AlertMessage": { 
    "IsAutoHide": false, 
    "Dissmisable": true, 
    "ShowIcon": false, 
    "Message": "success", 
    "AlertCSS": "alert alert-success", 
    "AlertType": 3, 
    "AlertTypeMetronic": "success" 
}, 
"PartialViewHtml":"-----partialView HTML code-----" 
} 

ответ

0

вы должны вызвать Json непосредственно данные, которые вы собираетесь сериализовать. Вызов Json возвращает объект JsonResult, поэтому не передавайте ему экземпляр JsonResult. Если вы действительно хотите использовать JsonResult, то верните это без дополнительного звонка на номер Json.

Также используйте перегрузку Json с параметром JsonRequestBehavior.

[HttpPost] 
public ActionResult MyCtroller(myViewModel model) 
{ 
    var result = new ActualInstanceOrContainerToBeReturned; 
    return Json(result, JsonRequestBehavior.AllowGet); 
} 

Кроме того, я не знаю, почему вы хотели бы вернуть вид внутри JsonResult, так что я не буду комментировать, кроме как сказать, что может быть плохой дизайн. В интересах SOC хранить данные и представление отдельно (это включает в себя создание этих элементов).

0

Я думаю, что вам нужно изменить ваш контроллер

public ActionResult MyCtroller(myViewModel model) 
{ 
    //processing stuff 

    JsonResultObject result = new JsonResultObject(); 

    try 
    { 
     //return secess 
    } 
    catch (Exception ex) 
    { 
     //return error 
    } 

    SearchCriteria<MyModel> viewModel = new SearchCriteria<MyModel>(); 
    viewModel.SortExpression = m => m.OrderByDescending(a => a.Date); 
    SearchResult<MyModel> searchResult = MyModelService.Instance.Search(viewModel); 

    // result.PartialViewHtml = RenderPartialViewToString("PartialView.cshtml", searchResult); 

    // If you want to render as html partial view 

    return PartialView("PartialView.cshtml", searchResult); 

    // return Json(result)); 
} 

и Javascript код

$.ajax({ 
      type: "POST", 
      url: action, 
      enctype: "multipart/form-data", 
      data: dataString, 
      cache: false, 
      contentType: contentType, 
      processData: processData, 
      beforeSend: function() { 
       block('#mymodal'); 
      }, 
      success: function (data, status, xhr) { 
        console.log("success ajax"); 
        onAjaxSuccess(xhr, status, '#mymodal') 
        $("#YOUR_DIV_ID").html(data); 
      }, 
      error: function (xhr, status) { console.log("error ajax"); onAjaxFailed(xhr, status, error, '#error-div') }, 
      complete: function (xhr, status) { console.log("complete ajax"); onAjaxComplete(xhr, status, '#mymodal', '#alert', '#myModal') } 
     }); 

 Смежные вопросы

  • Нет связанных вопросов^_^