在vs2008中CheckBoxList服务器控件在客户端生成HTML控件时,Value全部为“on”,所以使用下面的js,获不到自己想要的CheckBoxList的Value值
<!-- 引用jquery核心库 -->
<script src="jquery.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
$("#btnOK").click(function() {
var str = "你选中的是:\r\n";
$('input[type=checkbox]:checked').each(function() {
str += $(this).val() + "\r\n";
})
alert(str);
});
})
</script>
<body>
<form id="form1" runat="server">
<div>
<asp:CheckBoxList ID="chkBaseItem" runat="server">
</asp:CheckBoxList>
<input type="button" id="btnOK" value="确定" />
<input type="button" id="btnCancel" value="取消" οnclick="javascript:window.close();" />
</div>
</form>
</body>
所以为了解决这个问题,找了相关的资料,发现直接在js中做文章,是获不到值的,后来发现在绑定checkboxlist时,为ListItem每个对象添加一个alt属性,值保存对应的value值,是可以获得想要的值的。
js改成
<script type="text/javascript" language="javascript">
$(function() {
$("#btnOK").click(function() {
var valuelist = ""; //保存checkbox选中值
$('input[type=checkbox]:checked').each(function() {
//$(this):当前checkbox对象;
//$(this).parent("span"):checkbox父级span对象
valuelist += $(this).parent("span").attr("alt") + ",";
})
if (valuelist.length > 0) {
//得到选中的checkbox值序列
valuelist = valuelist.substring(0, valuelist.length - 1);
}
alert(valuelist);
});
})
</script>
后台代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
//获取从页面传过来的baseItemId
string baseItemId = GetString("baseItemId","");
BindBaseItem(baseItemId);
}
}
/// <summary>
/// 由于CheckBoxList在客户端解析的html文本中的value是一样的,
/// 所以要做以下的处理,在绑定checkboxlist时,为ListItem每个对象添加一个alt属性,值保存对应的value值
/// </summary>
private void BindBaseItem(string baseItemId)
{
//获得所有的多选选项(调用业务逻辑层方法,返回列表信息)
IList<EB_BITEMLIST> eb_bItemLists = EBBITEMLISTManager.GetEB_BITEMLISTsByBaseItemId(baseItemId);
if (eb_bItemLists != null && eb_bItemLists.Count > 0)
{
foreach (EB_BITEMLIST eb_bItemList in eb_bItemLists)
{
//分别为text值、value值
this.chkBaseItem.Items.Add(new ListItem(eb_bItemList.VALUE.ToString(), eb_bItemList.VALUE.ToString()));
}
}
//为ListItem对象添加alt属性,值保存value值
foreach (ListItem listItem in chkBaseItem.Items)
{
listItem.Attributes.Add("alt", listItem.Value);
}
}
/// <summary>
/// 获得提交的值
/// </summary>
/// <param name="name">名称</param>
/// <param name="defaultValue">转换失败时的默认值</param>
/// <returns>值</returns>
public static string GetString(string name, string defaultValue)
{
string value = defaultValue;
if (HttpContext.Current.Request.QueryString[name] != null)
{
value = GetQueryString(name);
}
if (HttpContext.Current.Request.Form[name] != null)
{
value = HttpContext.Current.Request.Form[name];
}
return value;
}
可能我们所实现的功能不一样,所以有些地方根据不同的需要有所改变,如果有什么问题,可以给我留言,有时间有能力我一定解答。