Asp.Net常见问题及技术实现方案(一)

来源:互联网 发布:涉及大数据的上市公司 编辑:程序博客网 时间:2024/06/10 01:30

         最近在学Asp.net,常常被一些鸡毛蒜皮的小错误小问题搞得焦头烂额,情急之下把所碰到的问题既解决办法,还有一些技术实现方案记录下来,已被日后查看,今天整理了一部分,和大家分享(老手免看,看了也不要笑话我),后面我会陆续贴出来。主要是希望:1给自己增加点印象,学得更深些。2为和我一样菜的新手们提供点帮助,少走弯路。 

1.gridview 找不到数据源中字段?

答:看绑定数据时,字段是否与sql语句一致

2.System.IndexOutOfRangeException: There is no row at position 0.

答:datatable 中没有数据

3.select语句中存在a.name,b.pwd,时,数据绑定时报没有数据错误

答:数据绑定时,要写name,pwd, 前面不能加a.或b.

4.postbackurl作用

答:将本页内容全部提交到目标页,与transfer作用相近

5.form 提交方法

答:1.用action直接写;
2.用javascript脚本写,例:
<script>function navi()
{
if(radio1.checked)
form1.action="1.aspx";
else form1.action="2.aspx";
form1.submit;

}

6.编码问题(国际化):例url中有中文时,提交出现问题

答:web.config文件中<gloablization responseEncoding="GB2312"
requestEncoding="GB2312"></gloablelization>该工程所
有请求和响应的编码都为GB2312

7.Gridview为空时怎样只显示表头

答:解决:加一行
 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        //数据绑定
        if (e.Row.RowType == DataControlRowType.DataRow)
        {  
            if (e.Row.Cells[0].Text == "&nbsp;") // GridView中//没有数据只显示GridView的头部
            {
                e.Row.Visible = false; //服务器不向客户端发送控//件的信息
                return;
            }
       }
    }

8.指令作用 例:<!--#include -->

答:在编译之前进行一定处理,并不参与编译

9.每个folder下都可以放web.config文件,搜索路径从本
文件夹向跟搜索,若没有就调用机器的web.config

10.关于换皮肤

答:第一步:App_Themes中添加主题文件夹HotSummer,在主题文件夹下添加.skin文件,设置控件皮肤,例:
<asp:Label  runat="server" "BackColor="LightGreen">
<asp:Label  runat="server"SkinId="sk1"BackColor="LightGreen">
同时在响应.aspx文件控件的skinId属性中输入sk1(不输入时默认没有ID的皮肤效果)。
第二步:法一:在web.config文件中配置皮肤,例:
<pages theme="HotSummer"/>   (HotSummer是主题文件夹名)
第二步:法二:通过页面.aspx.cs 中的PreInit方法设置主体文件,例:
 protected void Page_PreInit(object sender, EventArgs e)
    {
        this.Theme = "HotSummer";
    }

11.保持状态解决八法

答:Asp.net状态解决方式:
客户端:试图状态,控件状态,隐藏域,cookie,查询字符串
服务器:应用程序状态(Application)会话状态(Session)配置文件属性(Profile)

12.GridView分页显示_之_数据绑定

答:1.设置AllowPaging=true;
PagerSetting 中的mode,还有PageSize
2.在.aspx.cs中用PageIndexChanging方法,对翻页后的数据重新绑定,例
  protected void EList_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        EList.PageIndex = e.NewPageIndex;
        bingdata();
    }
 private void bingdata()
    {
        DataTable dt = new SQLOperator().SelectToDataTable("select * from employeeinfo");
        EList.DataSource = dt;
        EList.DataBind();
    }

13.GridView分页显示_之_选中本页
对Button操作,使本页所有checkbox都选中,并保存状态,同时将所得数据结果存入隐藏域中

答:

protected void btnThisAllSelect_Click(object sender, EventArgs e)
 {//选中本页checkbox的所有选项
   StringBuilder eids = new StringBuilder() ;
        foreach (GridViewRow row in EList.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow)
           {
        CheckBox cb = row.FindControl("cbDelete") as CheckBox;
                if (cb.Checked == true) { }
                else   //若原来为选中,则致为选中状态
                {
                    cb.Checked = true;
                    eids.Append(row.Cells[1].Text);
                    eids.Append("$");
                }
            }
        }
       hfID.Value += eids.ToString();//写入隐藏域
    }

14.GridView分页显示_之_选中所有
对Button操作,使所有页面中所有checkbox都选中,并保存状态,同时将所得数据结果存入隐藏域中
答:protected void btSelectAll_Click(object sender, EventArgs e)
{//将GridView中所有页面的checkbox都选中,并将结果存入隐藏域
        StringBuilder eids = new StringBuilder();
        for (int i=0;i<EList.PageCount;i++)
        {
            EList.PageIndex = i;//重新绑定每页数据
            bingdata();
            foreach (GridViewRow row in EList.Rows)
            {
             if (row.RowType == DataControlRowType.DataRow)
                 {
        CheckBox cb = row.FindControl("cbDelete") as CheckBox;
               cb.Checked = true;//将各页checkbox置为选中状态
                         eids.Append(row.Cells[1].Text);
                         eids.Append("$");
                 }
                   
            }
          
       }
       hfID.Value = eids.ToString();//附值隐藏域

    }
15.GridView分页显示_之_分页选择
对checkbox操作,使在不同页面选中的checkbox都保持状态,同时将所得数据结果存入隐藏域

答:
***********下面为.aspx.cs中代码
protected void EList_RowDataBound(object sender, GridViewRowEventArgs e)//行绑定方法
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {//判断是否数据行
        /***这里可加其他代码***/
 DataRowView drv=e.Row.DataItem as DataRowView;
            string eid=drv["eid"].ToString().Trim();
            CheckBox cbdelete = e.Row.FindControl("cbDelete") as CheckBox;        cbdelete.Attributes.Add("onclick","savetohf(this.checked,'"+eid+"')");//出发前台javascript方法,进行隐藏域附值
            if (this.hfID.Value.IndexOf(eid) != -1)
            {//加载页时附checkbox初值
                cbdelete.Checked = true;
            }
        }
    }
        ***************下面为javascript代码
<script language='javascript' type="text/javascript">
    function savetohf(ischecked,pid)
{
var myselect=document.form1.hfID.value;
if(myselect.indexOf(pid)==-1){
myselect+=pid+"$";
}
else{
myselect=myselect.replace(pid+"$","");
}
document.form1.hfID.value=myselect;
}   
    </script>
16.应用程序文件Application相关问题

答:Add New Item,Global Application Class文件,
Application_Start方法在服务器启动时触发,
Session_Start方法在用户发出第一个请求时触发
这些方法中可放入一些使用频率很高的对象或变量