2011-01-06 2 views
2

Я использую плагин оценки jQuery внутри asp: listview с помощью панели asp: update. Ниже приведена функция, которая называется нажатием рейтинговых звезд.Плагин оценки jQuery внутри панели updatel

function DisplayRatings() {    
      $('DIV.ratingBar').each(function() { 
       var id = $(this).attr('id'); 
       var count = $(this).attr('rel'); 
       $('#' + id).raty({ 
        showCancel: false, 
        readOnly: false, 
        showHalf: true, 
        start: count, 
        onClick: function(score) {      
         // I have to pass the score and ID to server side      
        } 
       }); 
      }); 
     } 

Теперь я должен передать «счет» и «ID» на стороне сервера и вызвать метод, который вызывает связывание с ListView и обновляет рейтинг на экране без обновления экрана. Просьба предложить, как это сделать. (Я не могу использовать рейтинг ajax-инструментария, так как он не поддерживает рейтинг половинной звезды)

ответ

3

Чтобы передать данные на сервер, просто сохраните их в скрытых формах (в UpdatePanel):

<asp:HiddenField id="score" runat="server" name="Score" ClientIDMode="Static" /> 
<asp:HiddenField id="id" runat="server" name="Score" ClientIDMode="Static" /> 

Если у вас много данных, чтобы пройти вперед и назад, вероятно, это будет иметь смысл только использовать одно скрытое поле и использовать сериализации/десериализации, чтобы сохранить все это там. Затем в onClick функции, установите значения этих полей, а также инициировать асинхронный постбэк:

$('#score').val(score); 
$('#id').val(id); 
__doPostBack('UpdatePanelID', '') 

Это вызовет обновление асинхронного вашего UpdatePanel, так же, как если связанные представить контроль нажали пользователь.

Обратите внимание, что если элемент управления jQuery сам находится в UpdatePanel, вам придется перенастроить его после обратной переадресации async, так как эффект будет таким же, как если бы страница была перезагружена, насколько это необходимо. Тем не менее, любой код javascript, который вы, возможно, запустили в $(document).ready(), не будет работать после async postback, так как вся страница не была фактически перезагружена.

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

// Page startup script - this adds a hook after an update panel is refreshed 
Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(onRefresh); 

function onRefresh(sender, args) { 
    // You can try to check which panel was updated 
    var panelsUpdated = args.get_panelsUpdated(); 
    var panelsCreated = args.get_panelsCreated(); 
    // but usually it's easier to just track the state of your jquery stuff 
    if (my_jquery_thing_is_visible && 
     my_indicator_that_it_has_already_been_configured===false) { 
     configureJqueryThing(); 
    } 
} 
0

решенный его с помощью jQuery с AJAX.

ASPX

функция SaveRating (ID, оценка) {
вар PARAMS = '{LinkId: "' + идентификатор + " ratingVal:" '+ оценка +"} ";
$ .ajax ({ тип: "POST", URL: "page.aspx/UpdateRating", данные: PARAMS, CONTENTTYPE: "приложения/JSON; кодировка = UTF-8", Datatype: «JSON " }); }

aspx.cs

[System.Web.Services.WebMethod] государственной статической силы UpdateRating (строка LinkId, внутр ratingVal) { // Код для обновления к БД }