【问题标题】:Refreshing UpdatePanel from jQueryUI Slider when value doesn't change当值不变时,从 jQueryUI Slider 刷新 UpdatePanel
【发布时间】:2014-09-25 15:08:20
【问题描述】:

这可能是我绕道而行的方式,但这里是这样。我在更新面板外有一个滑块,用于刷新该面板的内容。我将滑块值传递给隐藏字段并使用 .Net TextChanged 事件刷新面板。

一切都很好,直到我只单击手柄而不滑动它,所以值是相同的,它仍然会触发滑块“更改”事件,但是因为隐藏字段中的值没有改变 .Net TextChanged 事件没有t 触发,所以面板的内容消失了。

如果有一种方法可以在不移动手柄的情况下忽略单击,或者有某种方法可以保持相同的值传递给代码隐藏中的数据函数,那就太好了。

任何想法表示赞赏

戴夫

代码(为了清楚起见稍微缩短)

<script>
  $(document).ready(function () {
      $("#slider").slider({
          min: 1,
          max: sizes.length - 1,
          value: 2,
          animate: true,              
          create: function (event,ui){
              $("#slider").find(".ui-slider-handle").text("8")
          },
          slide: function (event, ui) {
              var value = $("#slider").slider("option", "value");
              $("#slider").find(".ui-slider-handle").text(sizes[ui.value]);
          },
          change: function (event, ui) {
              var value = $("#slider").slider("option", "value");                  
              $("#slider").find(".ui-slider-handle").text(sizes[ui.value]);
              $("#<%= hid.ClientID %>").val(sizes[ui.value]);
              var UpdatePanel1 = '<%=ajaxGrid.ClientID%>';
              __doPostBack(UpdatePanel1, '');
          },
          stop: function (event, ui) {
          }
      });
  });
</script>

<div id="slider" style="width:400px;"></div>
<asp:UpdatePanel runat="server" ID="ajaxGrid" UpdateMode="Conditional">
    <ContentTemplate>
        <div id="productgrid" class="productgrid" runat="server"></div>

    </ContentTemplate>
</asp:UpdatePanel>
<asp:HiddenField ID="hid" runat="server" OnValueChanged ="portionCount_TextChanged" />

代码背后

List<product> _products = new List<product>();

protected void Page_Load(object sender, EventArgs e)
{        
    if (!IsPostBack)
    {
        loadJSArray();
        _products = product.getProductsByCatParentAndServings(61, 8);   //  default
    }

    drawGrid();
}

protected void portionCount_TextChanged(object sender, EventArgs e)
{
    _products = product.getProductsByCatParentAndServings(61, int.Parse(hid.Value));
    drawGrid();
}

【问题讨论】:

    标签: asp.net jquery-ui updatepanel


    【解决方案1】:

    结果证明这是 Cardboard Programmer 的案例 - 我一发布它就想出了一个解决方案。

    我设置了一个临时变量,只是传递了最后一个设置的值并比较了它,所以 jQuery 位现在是这样的:

    var sliderWas=0;
          $("#slider").slider({
              min: 1,
              max: sizes.length - 1,
              value: 2,
              animate: true,              
              create: function (event,ui){
                  $("#slider").find(".ui-slider-handle").text("8")
              },
              slide: function (event, ui) {
                  var value = $("#slider").slider("option", "value");
                  $("#slider").find(".ui-slider-handle").text(sizes[ui.value]);
              },
              change: function (event, ui) {                  
                  var value = $("#slider").slider("option", "value");                  
                  $("#slider").find(".ui-slider-handle").text(sizes[ui.value]);
                  $("#<%= hid.ClientID %>").val(sizes[ui.value]);
                  if (ui.value != sliderWas) {
                      var UpdatePanel1 = '<%=ajaxGrid.ClientID%>';
                      __doPostBack(UpdatePanel1, '');
                  }
                  sliderWas = value;
              },
              stop: function (event, ui) {
              }
          });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多