这几天在写一个网上商城的例子,其中商品添加和编辑页面用到了DropDownList,在操作DropDownList时遇到了几个问题:
(1)若在Page_Load中绑定DropDownList,则它的SelectedValue会始终为列表中的第一项(不知道为什么,可能与页的生命周期等有关,不懂。。),我的解决方法是改在Page_PreRender中绑定,代码示例:
protected void Page_PreRender(object sender, EventArgs e)
{
DataAccess DataAs = new DataAccess();
DataTable DT = DataAs.CreateDataTable("select * from Categories");
selCatetories.DataSource = DT;
selCatetories.DataTextField = "name";
selCatetories.DataValueField = "category_id";
selCatetories.DataBind();
}
这样SelectedValue就没问题了
(2)在禁用了页面的ViewState之后,DropDownList的SelectedValue始终为空,我的解决方法是不使用DropDownList控件而改为用html表单控件select,并添加一type=hidden的input控件,然后添加javascript代码,代码示例:
<script type="text/javascript">
$(function() {
var selValue = $("#selCatetories").val();
$("#curValue").val(selValue);
// alert($("#curValue").val());
$("#selCatetories").change(function() {
var selValue = $(this).val();
// alert(selValue);
$("#curValue").val(selValue);
// alert($("#curValue").val());
});
})
</script>
select和hidden:
<input type="hidden" id="curValue" runat="server" />
<select id="selCatetories" runat="server" style="width: 153px;"></select>
(我想其实DropDownList的原理估计也就是这样了)
这样问题就全部解决了(其实解决他们花了我好长时间)。ol......
另外还有一些值得记录的知识点:
(1)_____禁用ViewState之后DataPager、DropDownList等好多服务器控件都不能用了,还有如果用visible等于false的textbox控件保存值也会失效
(2)_____无刷新分页 在$.post()外找不到动态生成的元素
(3)_____控制repeater的显示方式
protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
if (e.Item.DataItem != null)
{
if ((e.Item.ItemIndex + 1) % 3 == 0)
{
e.Item.Controls.Add(new LiteralControl("</tr><tr><td colspan=3><hr /></td></tr><tr>"));
}
}
}
(4)_____sql中的like匹配查询也不能用动态sql,如select item_id,name,base_price,small_image_url from [Items] where name like '%@name%',这样是不行的
(5)_____html控件select也能通过设置它的runat=server来在c#代码中用datasource的方式绑定,但是如果禁用了viewstate还是无法取得它的value(selectedvalue) 所以说viewstate是个大问题