Как я могу обновить ASP.NET MVC ViewData через jQuery ajax? - PullRequest
3 голосов
/ 12 февраля 2009

У меня есть страница, которая сильно зависит от IList (в ActionResult "MyEvents"), который я передаю в ViewData. Примерно так: ViewData ["events"] = listOfEvents; и в конце я просто возвращаю View ();

И в моем View я беру этот ViewData ["events"] и делаю в нем foreach, чтобы я мог перебирать его содержимое.

Но эти ViewData должны быть динамически заполнены. Поэтому, когда я нажимаю на день (я использую jQuery DatePicker), этот день отправляется в качестве аргумента «MyEvents», и этот день будет очень важен для моего listOfEvents, который заполнит мои ViewData [«events»]. 1009 *

Но в результате я получаю, что div, содержащий мой foreach, создает еще одну целую страницу внутри него !! Я пытался сделать $ ("# myDiv"). Html (contentFromMyEvents) , и это было то, что случилось.

Только для тестирования, я также попытался сделать $ ("# myDiv"). Text (contentFromMyEvents) и весь HTML-код со всеми его тегами и всем остальным из моей страницы появился внутри ДИВ! Это была страница внутри страницы !!

Итак, я думаю, что это происходит, потому что я возвращаю " return View (); " и, конечно, он снова отобразит весь мой View.

Итак, как я могу передать только ViewData ["events"] и обновить его на своей странице ??

Спасибо !!

Ответы [ 3 ]

3 голосов
/ 12 февраля 2009

Посмотрите на функцию загрузки в jQuery (http://docs.jquery.com/Ajax/load).. Вызовите контроллер с нагрузкой и вставьте результат в ваш HTML-документ.

$("myDiv").load("/Controller/Action");

Ваши ViewData будут проанализированы на стороне сервера. Вместо того, чтобы возвращать View (), возвращайте PartialView (), указывающий на пользовательский элемент управления. Получается только фрагмент HTML.

1 голос
/ 12 февраля 2009

Вы должны смотреть на передачу данных взад и вперед как JSON .

Затем используйте jQuery / Javascript для манипулирования и форматирования данных по своему усмотрению.

Помните, что как только страница находится на клиенте, браузер клиента не имеет представления о том, что такое ViewData.

Edit: Код действия:

public ActionResult AjaxGetEvents(int id)
{
    IList<object> events = new List<object>();
    foreach( Event event in SomeMethodToGetEvents(id) )
    {
       events.Add( new { Property1 = event.Property1, Property2 = event.Property2 } );
    }
    return JSON(events);
}

Код на стороне клиента:

var url = "some url that returns JSON";
jQuery.getJSON( url, function(data){
    jQuery.each( data ){
        jQuery("#someDiv").append( data.Property1 + " " + data.Property2 "<br/>" );
    });
 });     
1 голос
/ 12 февраля 2009

Вы можете использовать частичное отображение или jquery выбрать элемент из возвращаемого значения.

$("#myDiv").empty().append($(contentFromMyEvents).find('#myDiv'));

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

...