JQuery MultiSelect更新实体数据源

时间:2013-08-17 13:05:20

标签: javascript asp.net entity-framework

我正在使用jquery.uix.multiselect。根据所选选项(付款类别),gridview显示付款清单。

首先,我在选择框中使用静态选项值:

 <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中获取所选类别值的列表:

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字符串:

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调用并成功,多选中填充了数据库中的值和名称对。但是,这导致我的PaymentCategory过滤器停止工作。 我找出原因是因为多选框现在用javascript填充,服务器端代码不知道选择框中有什么,所以multiselectbox.Items.Count提出“0”和for循环什么也没做。

所以我决定使用javascript来获取CategoryId值。我能够很容易地获得多选中的值:

<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)首先,我尝试将ID列表发送到上面的WebMethod。但是我发现WebMethod必须是静态的,所以我也无法访问那里的EntityDataSource。然后我尝试在后面的代码中创建一个函数来重置Where String,但我的WebMethod无法调用Function(实例 - 静态问题再次)。从进一步阅读我得出一个Web服务可能是答案 - 但后来我不得不考虑我仍然必须使用它来重置EntityDataSource,或访问gridview给它一个新的数据源,或.... / p>

解决方案2)更改方法,现在使用Javascript更新实体数据源。但是,我无法弄清楚如何做到这一点。我不知道如何使用JavaScript访问实体数据源的Where属性。从阅读开始,它似乎是用Java访问控件,你需要访问ClientIdMode属性,这样你就知道要调用它 - 但是EntityDataSource没有ClientIdMode ....

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

所以我的问题主要是我的方法。我已经获得了ID列表,我有一个函数可以创建一个很好的whereclause过滤器,但是我无法将这两个东西放在一起。我很高兴回过头来改变我做任何事情的方式 - 我确信我正在接近这个难题的方式非常愚蠢。

1 个答案:

答案 0 :(得分:0)

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

不是使用jquery来填充选择框,而是按照https://stackoverflow.com/users/502950/mikrodel

中的示例在后面的代码中填充它

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

谢谢你mikrodel。我会投票给你,但我还没有声誉:)