2016-06-23 2 views
0

Я новичок в ASP.NET MVC, написать этот Java код сценария для извлечения любых данных из контроллера:
Почему Viewbag не отображается на странице просмотра asp.net mvc?

$.ajax({ 
    url: '@Url.Action("CallService", "MyScore")', 
    type: 'GET', 
    dataType: 'json', 
    cache: false, 
    data: { 
     'id': 29 
    }, 
    success: function(color) { 
     //alert(color); 
    }, 
    error: function() { 
     alert('Error occured'); 
    } 
}); 

и писать эти действия в контроллере:

[HttpGet] 
     public ActionResult CallService(string id) 
     { 

      var idNum = Convert.ToInt32(id); 

      string color = idNum.ToString(); 
      ViewBag.Myfamily = "razzaqi"; 

      return Json(color, JsonRequestBehavior.AllowGet); 
     } 


ввиду страница написать этот код:

<h1> Hello Dear @ViewBag.Myfamily</h1> 


, когда я запустить проект <h1> Hello Dear @ViewBag.Myfamily</h1> не показать мне, но я думаю, покажите мне этот выход:

Hello Dear razzaqi 
+0

Потому что вы отправки обратно 'json' (не' значение ViewBag'). И измените параметр на 'int id', если вы ожидаете' int' –

+0

@StephenMuecke, как можно вернуть значение viewBag? –

+0

Не используйте 'ViewBag' - вы хотите вернуть' 'razzaqi'' в представление use' return Json («razzaqi», JsonRequestBehavior.AllowGet); », а затем в обратном вызове ajax update, обновите DOM - например. 'success: function (data) {$ ('# someElement').HTML (данные); } ' –

ответ

1

Вы возвращаете JSON не ViewBag. Вам необходимо отправить "razzaqi" как часть объекта JSON. Настройка HTML, как

<h1> Hello Dear <span id='familyname'></span></h1> 

Modify You контроллера для возврата myfamily как часть объекта JSON.

[HttpGet] 
public ActionResult CallService(int id) 
{ 
    string color = id.ToString(); 

    return Json(new { 
     color = color 
     myfamily = "razzaqi" 
    }, JsonRequestBehavior.AllowGet); 
} 

Потребляйте результат как

$.ajax({ 
    url: '@Url.Action("CallService", "MyScore")', 
    type: 'GET', 
    dataType: 'json', 
    cache: false, 
    data: { 'id': 29 }, 
    success: function (data) { 
     $('#familyname').text(data.myfamily) 
    }, 
    error: function() { 
     alert('Error occured'); 
    } 
}); 
0

Объект Viewbag заполняется в поле зрения, на стороне сервера, делая вид. Ваш вызов ajax связывается с сервером, спрашивая о данных Json после того, как представление уже сделано.

Так вы слишком поздно преходящие объекты на ваш viewbag если вы делаете это таким образом ...


Есть, однако, некоторые обходные пути/решения этой проблемы:

  1. Пусть контроллер верните переменную в Json, она возвращается.
    • Простой и эффективный способ, чтобы получить данные, необходимые
    • Html помощников и т.д., не будет работать, однако иногда вам просто нужно что ужасном viewbag ...
  2. перезагружать PartialView когда делает ajax-вызов.
    • Требуется больше времени для реализации, вам нужно будет создать новое действие и частичное представление.
    • Хорошо, если вы хотите больше контента, чтобы изменить на вызов и хотите использовать HTML хелперы и т.д.
Смежные вопросы