2014-12-02 2 views
0

В соответствии с MSDN ActionResult используется для возврата более одного типа результата в зависимости от метода.
You decide which type of action result to return based on the task that the action method is performing.Возврат либо JSON, либо PartialView в том же методе действий

Я только начал новую работу, где их сайт MVC является настолько сложным и запутанным, что определенные изменения действительно dificult сделать, не нарушая то, что уже работает.

Мой вопрос: Использование Ajax.BeginForm, возможно ли вернуть JSON или частичный вид из одного и того же метода действий в зависимости от значения параметра?

Вот простой пример

@using (Ajax.BeginForm("AddNetworkLocationContact", "NetworkLocations", new AjaxOptions() {UpdateTargetId = "networkLocationList", OnSuccess = "onContactAddSuccess"})) 

Это попадает в контроллер, который (в данный момент) имеет доступ к ViewModel собственности под названием PartialBeingCalledFrom.

В зависимости от того, откуда он вызван (либо Guide, либо EmergencyContactsTable), я хочу, чтобы он отображал ответ JSON или ответ частичного представления. Эта строка не работает.

if(viewModel.PartialBeingCalledFrom == CallerLocation.Guide) 
       return PartialView("_NetworkLocationList", GetNetworkLocationsViewModel(viewModel.ClientId, "New Emergency Contact has been added")); 

Эта линия делает

return Json(new 
       { 
        status = true, 
        updatedData = new 
        { 
         name = returnName, 
         number = returnListOfNumbers, 
         availability = viewModel.ExistingContactAvailablity, 
         contactId = viewModel.ExistingContactId, 
         docId = (string)network._id, 
         updatedContactsArray = (object)JsonConvert.SerializeObject(contactServices.GetContactPhoneNumberDictionary(ClientId.Value), Formatting.None) 
        } 

вопрос я предполагаю, это с тем, что я Объявите OnSuccess метод в моем Ajax.BeginForm который запускается правильно, когда я возвращать данные в формате JSON. Я предполагаю, что jquery не может определить, является ли то, что получает JSON, или является представлением, и, следовательно, не знает, когда выполнить частичный вид вверх UpdateTargetId, указанный в вышеуказанном вызове ajax. Есть ли хороший способ достичь этого типа функциональности?

Dupe, который не появился ни в одном поиске, пока я не разместил это!
ASP.NET MVC controller actions that return JSON or partial html

ответ

-1

Вы можете проверить тип содержимого ответа, чтобы увидеть, если это JSON или нет. Пока ваши ответы будут выполнены правильно, это всегда должно быть установлено для результатов JSON.

// make your onsuccess method take all 3 parameters that get passed back. 
function myOnSuccess (result, status, xhr){ 

    // get contentType. set to empty string if null 
    var contentType = xhr.getResponseHeader('content-type') || ''; 

    if (contentType.indexOf('json') > -1){ 
     // parse your json result and do json stuff. 
    } else{ 
     // this is likely a partial view/html; do html stuff. 
    } 
} 
Смежные вопросы