2014-04-08 1 views
0

У меня есть числовое значение «значка», которое я пытаюсь отобразить в меню в моем приложении MVC 5.1.Подражать jquery hide от контроллера MVC

<span id="myBadge" class="badge menu-badge">@SessionData.MyCount</span> 

У меня есть класс SessionData, поэтому мне не нужно проходить магические строки.

public class SessionData 
{ 
    const string MyCountKey = "MyCount"; 

    public static int MyCount 
    { 
     get { return HttpContext.Current.Session[MyCountKey] != null ? (int)HttpContext.Current.Session[MyCountKey] : 0; } 
     set { HttpContext.Current.Session[MyCountKey] = value; } 
    } 
} 

Значок изначально заполняется с базового контроллера, который выполняет вызов базы данных.

SessionData.MyCount = CountThingsFromDatabase(); 

Я использую яваскрипта & JQuery на переднем конце, как пользователи могут изменять данные. Если счетчик достигает 0, команда jquery скрывает значок «0».

function setBadgeValue(badgeName, count) { 
    $(badgeName).html(count); 
    count > 0 ? $(badgeName).show() : $(badgeName).hide(); 
} 

Все это отлично работает за одним исключением. Когда контроллер получает счетчик «0», я хотел бы скрыть значок из представления так же, как команды jquery show/hide. Элемент jQuery для интерфейса работает чудесно, но я не уверен, как добиться такого же эффекта со стороны контроллера.

Любая помощь была бы принята с благодарностью.

Update 1:

Представления У меня есть использовать объекты Telerik/Кендо. Это из представления, которое отображает сетку Кендо. Каждая строка сетки имеет кнопку, привязанную к этому методу. Я не уверен, что это поможет опубликовать весь просмотр/контроллер, поскольку большинство из них связано с Кэндо.

function addToCart(e) { 
    // Get the grid data 
    var grid = $("#Grid").data("kendoGrid"); 
    var dataItem = grid.dataItem(grid.select()); 

    // Add item to the cart 
    $.ajax({ 
    url: 'Search/AddCart', 
    data: { itemId: dataItem.ItemId }, 
    success: function() { 
     $('_MyBadge').html(); 
     $('_Layout').html(); 

     // Update the count 
     setBadgeValue("#myBadge", 1); 
    }, 
    error: function (xmlHttpRequest, textStatus, errorThrown) { 
     alert('Failed to add item #' + dataItem.itemId + ' to your cart.\nStatus: ' + textStatus + '\nError: ' + errorThrown); 
    } 
    }); 
} 

ответ

1

Не нужно использовать контроллер в любом случае, просто скройте свой значок первоначально в представлении, если ваш счет равен нулю.

<span id="myBadge" class="badge menu-badge" style="display: @(SessionData.MyCount > 0 ? "block" : "none");">@SessionData.MyCount</span> 
+0

Я действительно пробовал это, но у меня была та же проблема, что и с предложением Дэвида Херста. Он скрывает данные при загрузке, но затем будущие jquery show/hides не работают. Тем не менее, я думаю, что мы на правильном пути с настройкой стиля. Мне просто нужно выяснить, к чему это нужно. – Rethic

+1

Я беру это обратно. Это сработало отлично, я забыл обновить свой кеш. Спасибо! – Rethic

2

Как насчет этого на вид?

@if (SessionData.MyCount == 0) 
{ 
    <span id="myBadge" class="badge menu-badge" style="display: none;">@SessionData.MyCount</span> 
} 
else 
{ 
    <span id="myBadge" class="badge menu-badge">@SessionData.MyCount</span> 
} 
+0

Когда я это пробовал, действие контроллера отображается и скрывается соответствующим образом, но функция jquery show/hide теперь работает дольше на каждой странице. – Rethic

+0

Опубликуйте весь свой скрипт или, по крайней мере, часть, которая вызывает вашу функцию. –

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

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