我正在使用jquery.uix.multiselect。根據選定的選項(支付類別),gridview顯示付款清單。JQuery MultiSelect更新實體數據源
起初我使用的選擇框靜態選項值:
<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>
然後我得到所選類別值的代碼隱藏列表:
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和成功的方式對它進行了調用,multiselect中填充了來自數據庫的值和名稱對。但是,這導致我的PaymentCategory過濾器停止工作。 我的理由是,因爲multislect框現在正在填充javascript,服務器端代碼不知道什麼是在選擇框,所以multiselectbox.Items.Count與「0」和用於循環沒有做任何事情。
因此,我決定我將不得不使用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>
然而,儘管有類別ID值的正確列表,現在我不知道該怎麼處理它們。
解決方案1)首先嚐試將Ids列表發送到上面的WebMethod。但是我發現一個WebMethod必須是靜態的,所以我無法訪問那裏的EntityDataSource。然後我嘗試在後面的代碼中重置Where String,但是我的WebMethod無法調用Function(實例 - 靜態問題)。從進一步的閱讀中我得出了一個Web服務可能是答案 - 但後來我被卡住了,認爲我仍然必須使用它來重置EntityDataSource,或者訪問gridview以給它一個新的數據源,或者......。
解決方案2)更改方法,現在用Javascript更新實體數據源。但是,我無法解決如何做到這一點。我不知道如何通過JavaScript訪問實體數據源的Where屬性。從閱讀它似乎訪問控制與Java你需要訪問ClientIdMode屬性,所以你知道該怎麼稱呼它 - 但一個EntityDataSource沒有ClientIdMode ....
解決方案3)我也想過要去回到我填充選項的方式,並認爲我可以在代碼背後做到這一點 - 但它似乎沒有ASP選擇框,它只是HTML,所以如果我想用可愛的jquery-uix-multiselect,我必須填充它與JavaScript,不?
所以我的問題主要是關於我的方法。我已經得到了Ids列表,我有一個函數創建了一個很好的where條款過濾器,但我無法將這兩件事情結合在一起。我很高興回到幾個步驟,改變我做過的任何事情 - 我確信我正在接近這個難題的方式非常愚蠢。