【问题标题】:Mimicking a jquery hide from an MVC controller从 MVC 控制器中模仿 jquery 隐藏
【发布时间】:2014-04-08 13:06:54
【问题描述】:

我尝试在 MVC 5.1 应用程序的菜单上显示一个数字“徽章”值。

<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();

当用户修改数据时,我在前端使用 javascript 和 jquery。如果计数达到 0,jquery 命令会隐藏“0”标记。

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

除了一个例外,所有这些都可以正常工作。当控制器检索到“0”计数时,我想以与 jquery 显示/隐藏命令相同的方式从视图中隐藏徽章。前端 jquery 部分工作得非常好,但我不确定如何从控制器端实现相同的效果。

任何帮助将不胜感激。

更新 1:

我使用 Telerik/Kendo 对象的视图。这是来自显示剑道网格​​的视图。每个网格行都有一个与此方法相关联的按钮。我不确定发布整个视图/控制器是否会有所帮助,因为其中大部分都与剑道有关。

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);
    }
  });
}

【问题讨论】:

    标签: c# jquery asp.net-mvc show-hide badge


    【解决方案1】:

    在视图上这样做怎么样?

    @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>
    }
    

    【讨论】:

    • 当我尝试此操作时,控制器操作会适当地显示和隐藏,但 jquery 显示/隐藏功能现在不再适用于每个页面。
    • 发布整个脚本,或者至少发布调用函数的部分。
    【解决方案2】:

    无需以任何方式使用控制器,如果您的计数为零,只需将您的徽章最初隐藏在视图中即可。

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

    【讨论】:

    • 我确实尝试过这个,但我遇到了与大卫赫斯特的建议相同的问题。它在加载时隐藏数据,但是以后的 jquery 显示/隐藏不起作用。但是,我认为我们在设置风格方面走在了正确的轨道上。我只需要弄清楚将其设置为什么。
    • 我收回了。这工作得很好,我忘了刷新我的缓存。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 1970-01-01
    • 2014-08-16
    • 2016-05-28
    • 2017-02-18
    相关资源
    最近更新 更多