Asp .NET控件获取焦点的常见问题

本文汇总了在ASP.NET开发中遇到的控件交互问题,包括如何设置按钮的选中状态、DropDownList的选择操作、TextBox的焦点与内容处理,以及GridView中的CheckBoxField获取和无数据情况的处理。此外,还涉及了UpdatePanel中运行脚本和回车触发按钮的方法。

在asp .net开发时,使用控件过程常有些小问题,每次都去找有点麻烦,在此收集遇到的问题,不断补充……

O、通用

1、如何画出控件的选中状态,像设计时的那样

【解决方案】可通过换图片来实现:示例代码如下(btnAdd为一服务端按钮控件)

btnAdd.Attributes("onMouseOver") = "javascript:this.src='AN_Add_Over.gif';"   
btnAdd.Attributes("onMouseOut")= "javascript:this.src='AN_Add.gif';"   
btnAdd.Attributes("onMouseDown") = "javascript:this.src='AN_Add_Down.gif';"
btnAdd.Attributes("onMouseOver") = "javascript:this.src='AN_Add_Over.gif';"
btnAdd.Attributes("onMouseOut")= "javascript:this.src='AN_Add.gif';"
btnAdd.Attributes("onMouseDown") = "javascript:this.src='AN_Add_Down.gif';"

一、DropDownList

1、如何选择选项:

【问题描述】DropDownList控件不能直接赋值给Text属性来选择。

【解决办法】

string id="1";  
DropDownList1.Items.FindByValue(id).Selected=true;
string id="1";
DropDownList1.Items.FindByValue(id).Selected=true;


2、不能在 DropDownList 中选择多个项:

【问题描述】当选择一个选项时(源代码如下),出现“不能在 DropDownList 中选择多个项”的错误提示。

DropDownList1.Items.FindByValue(id).Selected=true;  
DropDownList1.Items.FindByValue(id).Selected=true;

【解决办法】

DropDownList1.ClearSelection();  
DropDownList1.Items.FindByValue(id).Selected=true;  
DropDownList1.ClearSelection();
DropDownList1.Items.FindByValue(id).Selected=true;

二、TextBox

1、获取焦点时,选中内容

【技巧】

<asp:TextBox ID="TextBoxUserID" runat="server" style="width:160px" onfocus="javascript:this.select()"/>
<input type="text" onfocus="this.select()" value="sssssbbbbccc"/>
<asp:TextBox ID="TextBoxUserID" runat="server" style="width:160px" onfocus="javascript:this.select()"/>
<input type="text" onfocus="this.select()" value="sssssbbbbccc"/>

2、Password风格时,赋值

【问题描述】Password风格时,直接对Text属性赋值无效。

【解决办法】

textBoxPasswordField.Attributes.Add("value", "mypass");
textBoxPasswordField.Attributes.Add("value", "mypass");

3、回车转移焦点到下一控件

【方法一:C#后台代码】

this.txt_userName.Attributes.Add("onkeydown","if(event.keyCode==13)event.keyCode=9");
this.txt_userName.Attributes.Add("onkeydown","if(event.keyCode==13)event.keyCode=9");

【方法二:Asp.NET 前台代码】

<ASP:TextBox onkeydown="if(window.event.keyCode==13){window.event.keyCode=9;}">
<ASP:TextBox onkeydown="if(window.event.keyCode==13){window.event.keyCode=9;}">

【方法三:通用】

<mce:script language="javascript" for="document" event="onkeydown"><!--  
if(event.keyCode==13 && event.srcElement.type!='button' && event.srcElement.type!='submit' && event.srcElement.type!='reset' && event.srcElement.type!='textarea' && event.srcElement.type!='')  
     event.keyCode=9;  
// --></mce:script>
<mce:script language="javascript" for="document" event="onkeydown"><!--
if(event.keyCode==13 && event.srcElement.type!='button' && event.srcElement.type!='submit' && event.srcElement.type!='reset' && event.srcElement.type!='textarea' && event.srcElement.type!='')
     event.keyCode=9;
// --></mce:script>

判断是否为button, 是因为在HTML上会有type="button";判断是否为submit,是因为HTML上会有type="submit";判断是否为reset,是因为HTML上的"重置"应该要被执行;判断是否为空,是因为对于HTML上的"<a>链接"也应该被执行,这种情况发生的情况不多,可以使用"tabindex=-1"的方式来取消链接获得焦点.

三、GridView

1、获取CheckBoxField列值

【问题描述】直接通过GridView的Cells属性是无法获取其值的,其中Text属性为空串。

【解决办法】

/*-----------------------------------------
// 前台代码
<asp:GridView ID="GridView1" runat="server" Width="418px">
     <Columns>
         <asp:CheckBoxField DataField="是否有效" HeaderText="有效性" />
     </Columns>
</asp:GridView>
-----------------------------------------*/

//后台代码:  
CheckBox cb = (CheckBox)GridView_Users.SelectedRow.Cells[1].Controls[0];  
bool bResult= cb.Checked;
/*-----------------------------------------
// 前台代码
<asp:GridView ID="GridView1" runat="server" Width="418px">
     <Columns>
         <asp:CheckBoxField DataField="是否有效" HeaderText="有效性" />
     </Columns>
</asp:GridView>
-----------------------------------------*/

//后台代码:
CheckBox cb = (CheckBox)GridView_Users.SelectedRow.Cells[1].Controls[0];
bool bResult= cb.Checked;

2、GridView无数据时不显示的问题

【问题描述】绑定数据时,如果DataTable对象行数为0,则添加一空行,然后修改显示样子。

【解决办法】

protected bool GridViewBind(GridView gridview, string sqlcmd)  
{  
    try
    {  
        DataTable dt = new DataTable();  
        SqlDataAdapter sqlda = new SqlDataAdapter(sqlcmd, GetConnectionString());  
        sqlda.Fill(dt);  
        gridview.AutoGenerateColumns = true;  
        gridview.Font.Size = FontUnit.XSmall;  
        if (dt.Rows.Count == 0)   // 添加空记录  
        {  
            dt.Rows.Add(dt.NewRow());           
            gridview.DataSource = dt;  
            gridview.DataBind();  

            int columnCount = gridview.Rows[0].Cells.Count;  
            gridview.Rows[0].Cells.Clear();  
            gridview.Rows[0].Cells.Add(new TableCell());  
            gridview.Rows[0].Cells[0].ColumnSpan = columnCount;  
            gridview.Rows[0].Cells[0].Text = "没有记录.";  
            dt.Rows.Clear();  
        }  
        else
        {     
            gridview.DataSource = dt;  
            gridview.DataBind();  
        }  

    }  
    catch (Exception ex)  
    {  
        SetErrorMessage(string.Format("绑定 GridView 时出现异常:/n    ", ex.Message));  
        return false;  
    }  
    return true;  
}
        protected bool GridViewBind(GridView gridview, string sqlcmd)
        {
            try
            {
                DataTable dt = new DataTable();
                SqlDataAdapter sqlda = new SqlDataAdapter(sqlcmd, GetConnectionString());
                sqlda.Fill(dt);
                gridview.AutoGenerateColumns = true;
                gridview.Font.Size = FontUnit.XSmall;
                if (dt.Rows.Count == 0)   // 添加空记录
                {
                    dt.Rows.Add(dt.NewRow());        
                    gridview.DataSource = dt;
                    gridview.DataBind();

                    int columnCount = gridview.Rows[0].Cells.Count;
                    gridview.Rows[0].Cells.Clear();
                    gridview.Rows[0].Cells.Add(new TableCell());
                    gridview.Rows[0].Cells[0].ColumnSpan = columnCount;
                    gridview.Rows[0].Cells[0].Text = "没有记录.";
                    dt.Rows.Clear();
                }
                else
                {  
                    gridview.DataSource = dt;
                    gridview.DataBind();
                }

            }
            catch (Exception ex)
            {
                SetErrorMessage(string.Format("绑定 GridView 时出现异常:/n    ", ex.Message));
                return false;
            }
            return true;
        }

四、UpdatePanel(AJAX)

1、UpdatePanel中运行脚本

【解决办法】

view plaincopy to clipboardprint?
ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "test", "alert('哈哈,执行了这个脚本哦。')", true);
ScriptManager.RegisterStartupScript(this.UpdatePanel1, this.GetType(), "test", "alert('哈哈,执行了这个脚本哦。')", true);

回车时 触发指定的某个按钮控件 (方法二)


第一步:

//在html aspx页 加上下列JS代码

    <script language="jscript">
     function SubmitKeyClick(button)
     {
        if(event.keyCode == 13)
        {
            event.keyCode=9;
            event.returnValue = false;
            document.all[button].click();
        }    
     }
     </script>

第二步:

//在 <form>表单中加上如下代码 onkeydown="SubmitKeyClick('IB_search') 调用jscript方法指点控件名 id

<form id="form2" runat="server" onkeydown="SubmitKeyClick('IB_search');">

第三步:指定的asp:imagebutton控件

<td style="height: 23px">
                        <asp:imagebutton id="IB_search" runat="server" imageurl="~/AdminManage/Images/search_confirm.jpg" OnClick="IB_search_Click"></asp:imagebutton>
                    </td>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值