JQuery多选以更新实体数据源
JQuery MultiSelect to Update Entity Data Source
我使用的是jquery.uix.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>
然后我在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称之为WebMethod,并且成功地使用了数据库中的值和名称对填充多选。然而,这导致我的PaymentCategory过滤器停止工作。我发现原因是,因为multiselect框现在被javascript填充,服务器端代码不知道select框中有什么,所以multiselect框。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无法调用该函数(再次出现实例静态问题)。通过进一步的阅读,我发现Web服务可能是答案,但后来我陷入了思考,我仍然必须使用它来重置EntityDataSource,或者访问网格视图来为其提供新的数据源,或者。。。。
解决方案2)更改方法,现在使用Javascript更新实体数据源。然而,我不知道该怎么做。我不知道如何使用JavaScript访问实体数据源的Where属性。从阅读来看,用Java访问控件似乎需要访问ClientIdMode属性,这样你就知道该怎么称呼它了——但EntityDataSource没有ClientIdMode。。。。
解决方案3)我也想过回到填充选项的方式,并认为我可以在代码背后完成这项工作,但似乎没有ASP选择框,只有HTML,所以如果我想使用可爱的jquery uix multiselect,我必须用javascript填充它,不是吗???
所以我的问题主要是关于我的方法。我有Id的列表,我有一个函数,它创建了一个很好的where子句过滤器,但我不能把这两件事放在一起。我很高兴回到过去,改变我做任何事情的方式——我相信我处理这个谜题的方式有一些非常愚蠢的地方。
好的,所以最终的答案是将我的方法更改为填充选择框的方式。
我没有使用jquery来填充选择框,而是按照https://stackoverflow.com/users/502950/mikrodel
https://stackoverflow.com/a/14892701/2691962
谢谢米克罗德尔。我会投票支持你,但我还没有这样的声誉:)
- Datatables:通过DOM数据源中的名称引用列
- 如何将JSON数据源适合Jquery自动完成小部件
- SmartGWT数据源和CORS
- 微风得到的是实体而不是对象的集合
- 有没有一种方法可以在没有文档或jQuery的情况下使用javascript解码html实体
- Box2D多个实体的一个夹具
- 在MSCRM 2015中使用javascript限制多实体查找
- 有更好的方法吗?(递归解析HTML unicode实体)
- 如何使用angularJS从json的对象数组中显示和计数实体
- 带有变量的Angular.js数据源
- 将文档实体传递给JavaScript函数
- fullpage.js和物化.js;使用实体侧导航禁用鼠标滚动
- javascript将html实体条目发布后的下一个字母大写
- 在远程数据源调用之前,将筛选器注入数据源
- 如何转义字符串中的html实体
- Famo.us Js-将实体(粒子)设置到位置的动画
- 使用Angular在HTML中呈现HTML实体字符串
- 如何获得实体's对象信息
- JQuery多选以更新实体数据源
- 如何使用铯缩放实体/数据源