我有一个listview,它有一个嵌套的listview,它包含itemtemplate中的radcomboboxes。因此,ID(据我所知)对我来说毫无用处。
例如,如果我有30个项目,那么每个项目都将生成一个新的组合框,因此名称将由asp生成。我需要的是能够从用户正在使用的组合框中获取所选值。我目前正在使用jQuery和一些荒谬的parent().parent().children()
类型的废话,以便找到与提交按钮相关的正确组合框。
当点击提交按钮时,我需要它来找到它的相应组合框的选定值,以便我可以将其发送到帖子提交处理程序。问题是.val()
jQuery方法不起作用。当我使用类似的东西:
$(this).parent().parent().children().children(".statusCbo").val();
我最终得到的是文本值,而不是选中的值。我检查三次以确保我在aspx文件中正确绑定了字段;
DataTextField = '<%#Eval("name") %>' DataValueField = '<%#Eval("id") %>'
但正如我所说,我最终得到了所选项目的DataTextField值。我能得到的最好的解释是它与控件如何请求内容有关(通过ajax)。
所以无论如何,有人可以提供一些关于如何从组合框中准确获取所选值的建议吗?
更新: 我能够通过不同的方式获得对象的引用:
$(".submitTag").click(
function () {
var topLevel = $(this).closest(".CommentTopLevel");
var status = topLevel.find(".StatusTag").get_value();
//stub to test value
alert(status);
return false;
});
从这里开始,如果使用status.val(),它会给我文本而不是值(与以前相同的问题)。文档暗示我应该使用status.get_value();但是这说明该对象不支持该方法。有任何想法吗?
更新: 没关系,我发现它是一个返回的jquery对象,所以该方法不包括在内。继续挖掘。
解: 我需要采取额外的步骤来使用传统方法。我不知道它花了多长时间与我点击:
$(".submitTag").click(
function(){
var topLevel = $(this).closest(".CommentTopLevelTag"); //gets the parent container
var comboBoxID = topLevel.find(".StatusTag").attr("ID"); //gets the clientID of the jQuery object
var comboBoxRef = $find(comboBoxID); //finds the control by id and brings back a non-jQuery object (useable)
var comboBoxSelectedValue = comboBoxRef.get_value(); //uses the Telerik method to get the selected value
});
答案 0 :(得分:2)
自从我处理Telerik控件以来已经有一段时间了,但你正在做的是绕过Telerik为你使用的api,这让我觉得非常糟糕。 Telerik Controls的下一个版本可能会轻易破坏您的代码。
看,从listview传递客户端ID应该不难。有几种方法我会解决,但我现在就让你自己解决这个问题。获得控件的ClientID后,请按照telerik网站上的示例进行操作:
一旦你有了id,就做一些
var combo = $find(someVarReferencingTheId);
现在,您可以在客户端表单中引用组合框。现在找到一些从这里得到你想要的功能:
http://www.telerik.com/help/aspnet-ajax/combobox-client-side-radcombobox.html
...
PROFIT!
编辑:第一个链接到demos.telerik.com甚至不需要,我只是表明,因为那是我以前用来获取那行代码(我永远不会记得它是$get
还是{ {1}}我需要使用,除非我当时做了很多Telerik客户端的事情。)。
编辑2:$find
和$get
是ASP.NET构造,而不是Telerik。