首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于更新实体数据源的JQuery MultiSelect

用于更新实体数据源的JQuery MultiSelect
EN

Stack Overflow用户
提问于 2013-08-17 21:05:20
回答 1查看 791关注 0票数 1

我使用的是jquery.uix.multiselect。根据选定的选项(付款类别),网格视图将显示付款列表。

起初,我在选择框上使用静态选项值:

代码语言:javascript
复制
 <select  id="multiselectbox" multiple="true" size="4" 
    class="ui-multiselect" runat="server"> 
    <option value="11">Wine Expenses</option>
    <option value="12">Subs Old</option>
    <option value="13">Wine Receipts</option>
    <option value="14">Bank Fees</option>
    <option value="15">Bank Interest</option>
    <option value="16">Honour Boards</option>
 </select>

然后,我得到了一个列表,其中列出了codebehind中所选的类别值:

代码语言:javascript
复制
List<Int32> myIntList = new List<int>();;
    for (int i = 0; i < multiselectbox.Items.Count; i++)
    {
        if (multiselectbox.Items[i].Selected)
        {
            CategoryIdList.Add(multiselectbox.Items[i].Value).Convert.ToInt32;
        }
    }

最后,使用它为我的实体数据源创建一个Where字符串:

代码语言:javascript
复制
if (myIntList.Count() != 0)
    {

        string concatenatedIds = string.Join(",", myIntList.ToArray());
        WhereClause = String.Format("{0} {1}{2}", "it.CategoryId IN {", concatenatedIds, "}");

    }
    EntityDataSource1Payments.WhereParameters.Clear();
    EntityDataSource1Payments.AutoGenerateWhereClause = false;
    EntityDataSource1Payments.Where = WhereString;

在我决定从数据库填充选择框选项之前,一切都运行得很好。

为此,我最终使用了一个WebMethod,并将其与AJAX和success一起称为multiselect,multiselect是用数据库中的值和名称对填充的。然而,这导致我的PaymentCategory过滤器停止工作。我找出原因是因为多选框现在是用javascript填充的,服务器端代码不知道选择框中有什么,所以multiselectbox.Items.Count出现了"0“,而for循环什么也不做。

因此,我决定必须使用javascript来获取CategoryId值。我可以很容易地获得multiselect中的值:

代码语言:javascript
复制
<script type="text/javascript">
   function myButtonFunction() {


           var selectedlist = $(".ui-multiselect").val();
           alert(selectedlist);
           var finalObject = JSON.stringify(selectedlist);
           alert(finalObject);

           $.ajax({
               type: "post",
               contenttype: "application/json; charset=utf-8",
               url: "displaypayments.aspx/GetWhereString",
               data: finalObject,
               datatype: "json",
               success: function () { 

                alert("seems to have gone okay"); },
               error: function () { alert("error"); }
           });
       }

</script>  

然而,尽管有了正确的CategoryId值列表,但现在我不知道如何处理它们。

解决方案1)首先,我尝试将Ids列表发送到上面的WebMethod。但我发现WebMethod必须是静态的,所以我也无法访问其中的EntityDataSource。然后,我尝试在后台代码中创建一个函数来重置Where字符串,但我的WebMethod无法调用该函数(再次出现实例静态问题)。通过进一步的阅读,我发现Web Service可能是答案--但是后来我陷入了思考,认为我仍然必须使用它来重置EntityDataSource,或者访问网格视图来给它一个新的数据源,或者.

解决方案2)改变方法,现在用Javascript更新实体数据源。然而,我想不出该怎么做。我不知道如何使用JavaScript访问实体数据源的Where属性。从阅读上看,它似乎是使用Java语言访问控件,您需要访问ClientIdMode属性,以便知道如何命名它--但是EntityDataSource没有ClientIdMode……

解决方案3)我还想回到我填充选项的方式,并认为我可以在后台代码中完成-但似乎没有ASP选择框,它只有HTML,所以如果我想使用可爱的jquery-uix-multiselect,我必须用javascript填充它,不是吗?

所以我的问题主要是关于我的方法。我有一个I列表,我有一个函数可以创建一个很好的whereclause过滤器,但是我不能把这两个东西放在一起。我很高兴回到几个步骤,改变我做任何事情的方式-我相信我处理这个难题的方式有一些非常愚蠢的地方。

EN

回答 1

Stack Overflow用户

发布于 2013-08-18 21:52:46

好的,所以最后的答案是改变我填充选择框的方式。

我没有使用jquery填充选择框,而是按照https://stackoverflow.com/users/502950/mikrodel中的示例在后面的代码中填充了它

https://stackoverflow.com/a/14892701/2691962

谢谢你mikrodel。我会投你的票,但我还没有这个名气:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18289172

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档