首页 > 代码库 > 【ExtAspNet学习笔记】ExtAspNet控件库中常见问题
【ExtAspNet学习笔记】ExtAspNet控件库中常见问题
1、在Grid控件中添加CheckBoxField控件,选择一行时,如何获取选择的CheckBoxField所对应记录的唯一标识值?
●解决方案:
在前台Grid控件中,
添加“<ext:CheckBoxField ColumnId="myCheckBoxField" Width="60px" RenderAsStaticField="false" DataField="MyCheckBox" CommandName="CheckBox1"HeaderText="AutoPostback" />”代码,后台添加
“protected void gr_RowCommand(object sender, ExtAspNet.GridCommandEventArgs e)
{
if (e.CommandName == "CheckBox1")
{
ExtAspNet.CheckBoxField myCheckBoxField = gr.FindColumn("myCheckBoxField") as ExtAspNet.CheckBoxField;
// .取得选中行的索引值
int rowChecked = myCheckBoxField.ColumnIndex;
// .取得选中行的主键值
long SelectedRowKey = Convert.ToInt64(gr.DataKeys[rowChecked][0]);
}
}”
2、在页面加载时,如何执行一段JavaScript的代码?
●解决方案:
1)在Grid控件的PreRowDataBound事件中调用JS函数。
2)在Grid控件的RowDataBound事件中调用JS函数。
3)在Page_Load事件中,使用Attributes.Add为控件添加事件。
例子:
this.MenuTreeView.Attributes.Add("onclick", "OnTreeClick(event)");
添加点击事件,调用OnTreeClick函数。
4)在Page_Init事件中,也可以使用Attributes.Add为控件添加事件。
5)在后台,使用ExtAspNet.PageContext.RegisterStartupScript可以添加执行JS函数。
例子:
string showSourceScript = "(function(){getMainWindow().loadJS(‘data/source/" + fileName + "‘);}).defer(100);"; ExtAspNet.PageContext.RegisterStartupScript(showSourceScript);
6)在ExtAspNet控件中,在页面加载时,自动加载并执行JavaScript语句,function onReady()就是JavaScript函数,通过
“afterBuilder.Append("if(typeof(onReady)===‘function‘){onReady.call(window);}");”语句自动调用JavaScript函数。
7)在Asp控件中,在后台中,如果与页面不交互,可以使用“Page.ClientScript.RegisterStartupScript(this.GetType(), "MyScript", "alert(‘已使用!‘); ", true);”; 交互,使用“ScriptManager.RegisterClientScriptBlock(this.UpdatePanel1, this.GetType(), "MyScript", "alert(‘已使用!‘); ", true);”。
3、动态添加控件时,使用HiddenField,HiddenField与ExtAspNet的Lable控件有什么区别?
●解决方案:HiddenField是隐藏输入框的服务器控件,它可以保存不需要显示在页面上的且对安全性要求不高的数据;Lable是一个静态控件。
4、出现的错误:本次页面请求失败;原因以及什么情况下会出现这个问题?
●解决方案:
1) 调试时间过长的情况下,不论有错还是没错就会出现此种情况,时间约是2分钟以后;解决方案:重新执行,不超出出错时间即可。
2)在向数据库中插入数据时,所要插入的数据参数个数与类sqlhelper中的个数不相同或者名称不一样,就会出现这种情况,问题是由于数据库中新添加一个字段,存储过程没有添加,导致类sqlhelper中commandParameters不能与数据库相对应;解决方案:在存储过程中添加此字段的语句。
3)JavaScript中语句有问题时,也会出现此种情况;解决方案:调试JavaScript语句。
4)当Page_Load函数中没有任何执行语句时,会出现此种情况。
5)在操作执行过快的过程中,由于页面反映不过来,导致此种情况出现;解决方案:重新刷新页面。
5、如何实现控件中的滚动条?
●解决方案:如果需要添加滚动条的控件不是自适应,就会在内容溢出时自动加入滚动条,如果不出现滚动条,就需要用控件的AutoScroll属性来控制是否有滚动条。
6、ContentPanel中可以使用哪些控件?
●解决方案:Panel控件中只能存放ExtAspNet本身带的控件,ContantPanel中可以存放:ExtAspNet本身的、asp.net的控件以及HTML的控件都可以存放且显示,但是ContentPanel缺少Layout属性,无法对其进行布局。
7、EnableAjax与EnablePageLoadIng有什么具体的效果,如何保证页面的不回刷?
●解决方案:EnableAjax属性指控件是否启用ajax。
1)在默认的情况下,页面中PageManager控件(每个页面拥有一个)的EnableAjax属性默认为true。此时若将控件的EnableAjax属性设置为false,当该控件在回刷(假设该控件可以回刷)时,将会引发整个页面刷新,如果将其设置为true,则控件在回刷的时候,只会引发页面的局部刷新。
2)如果将PageManager控件的EnableAjax属性设置为false,则无论将可回刷的控件的EnableAjax设置为什么,当它在回刷的时候,均是整个页面刷新。
8、EnablePageLoading属性有什么作用。
●解决方案:该属性为PageManager控件所有,用于表示是否启用页面加载标示。当将其设置为false时,页面回刷时,右上角显示正在加载字样。如将其设置为true时,页面回刷时,右上角不显示下在加载字样。
9、如何保证页面的不回刷?
●解决方案:可以将PageManager控件的EnablePageLoading属性设置为false,但这样页面也是回刷,只是没有相应的显示效果而已。
10、后台调用JavaScript的方法?
●解决方案:到目前为止可以通过以下两种方式:
1)
ExtAspNet.PageContext.RegisterStartupScript("parent.window.location.href=http://www.mamicode.com/parent.window.location.href;");其中括号内又引号中的内容即为javascript脚本。
2)在后台代码中编写如下类似的代码:
StringBuilder js = new StringBuilder();
js.Append("<script language="JavaScript">");
js.Append("window.showModalDialog("Asp.aspx?rowNum=" + rowNum + "", "scroll=no");");
js.Append("</script>");
Response.Write(js.ToString());即可调用。
11、ExtAspNet动态添加控件有哪些限制?
●解决方案:目前所知道的有一点:要么在Page_Load方法中加载控件,要么在Page_Init方法中加载控件。
12、向Panel中如何动态加载控件?
●解决方案:可以有以下几种添加方法,以添加Label为例:
其中页面中的相关代码如下:
<ext:PageManager ID="PageManager1" runat="server" />
<ext:Panel ID="Panel1" runat="server" BodyPadding="5px" EnableBackgroundColor="true"
ShowBorder="true" ShowHeader="true" Title="Panel">
<Items>
</Items>
</ext:Panel>
1)第一种添加方法是在Page_Load代码中编写添加的方法,如下:
ExtAspNet.Label lb = new ExtAspNet.Label();
lb.ID="cc";
lb.Text = "新添加Label";
this.Panel1.Items.Add(lb);
2)第二种添加方法是在Page_Init方法中编写代码,如下:
protected void Page_Init(object sender, EventArgs e)
{
ExtAspNet.Label lb = new ExtAspNet.Label();
lb.ID = "cc";
lb.Text = "新添加Labe";
this.Panel1.Items.Add(lb);
}
13、在动态添加零配件中,若使用Session,应该注意哪些问题?
Session中
1)有效的窗品包括:
(1)Session对象只在建立Session对象的窗口中有效。
(2)在建立Session对象的窗口中新开链接的窗口。
2)无效的窗口包括:
(1)直接启动IE浏览器的窗口。
(2)不是在建立Session对象的窗口中新开链接的窗口。
14、关于window的使用
1)window控件中的height和weight有什么用途,若不设置,如何控制其窗口的大小。
height和weight是设置window的高和宽,若不设置,效果与“ ”效果一样,是根据window中调用界面内容大小一样,自动适应其内容的大小。
2)window的窗体如何进行鼠标拖拽实现大小,如何实现?
实现窗体大小的属性是:EnableResize,为true时,可以拖拽大小,为false时,不可以实现拖拽大小,默认为false。
3)window中什么情况下出现滚动条,什么情况下不出现滚动条?
IE6浏览器:当window调用的界面内容大小超过window自定义的高和宽,就会出现滚动条,经过试验,发现调用的界面定义为98%就不会出现滚动条,大于98%,就会出现滚动条;小于window自定义的高和宽,就不会出现滚动条。
谷歌浏览器中:当window调用的界面内容大小超过window自定义的高和宽,就会出现滚动条;小于window自定义的高和宽,就不会出现滚动条:此滚动条是自动出现的。
4)IsModal属性是在父页面跳出window时,为false时,父页面可以进行点击功能,父页面可用;为true,父页面可以进行点击功能,父页面不可用。
15、在控件Grid中,若点击一行,显示详情,事件RowClick和事件RowCommand哪一个更合适?
●解决方案:事件RowCommand会更合适,原因:使用事件RowCommand,点击的时候可响应,而RowClick不好找鼠标的样式,有时候鼠标样式不对,即小箭头才可用,此时不能响应。
16、EXT母版页使用
1)使用region结合contentpanel实现
该方案首先是用region给母版页划分出区域,然后在划分好的region中加入contentpanel作为插入holder的容器达到做为母版页的实现。该种方案好处是,区域划分简便,有自适应能力。但有严重的bug就是在contentpanel中加入的form内控件位置都会认为是无效的地位设置,所以内部布局不能调整,是严重的弊端。
2)使用region结合iform实现
该方案首先需要用region给母版页划分区域,然后再划分好的region中加入iform,该方案放弃了使用holder的想法,是由其他地方的region中的超链、按键等传递url给作为放置子页的regin中的iform实现页面的跳转。该方案的好处的是实现简单,有自适应能力。但是依然有严重的弊端,因为放置子页的是一个iform所以当页面过大显示不全时,滚动条会出现在iform中而不是出现浏览器的滚动条;而且由于是iform实现,所以在页面跳转中的实际跳转位置只是iform的位置,当页面真的跳转到其他页面的时候,“母版页”内容是不能跟着跳转的。
3)使用ASP母版页实现
实现方法完全与之前不使用ext控件时一样,只不过需要在母版页中加入Page信息。该方案没有致命弊端。但是对于自适应需要较上面两个方案相对复杂的实现。划分区域也需要较繁琐的方法。大体上的定位方法是通过div+css来实现。
4)母板页的自适应及区域划分
解决母板页自适应的问题,使用最多的方法就是当页面的宽度小到一定值的时候就让母板页内内容变为定值,就可以实现自适应,避免当页面变小时页面内容混乱的问题。说道这里就不得不说到区域划分的问题了,主体上的思路都是从上至下分为3个div这个毋庸置疑,关键是存放2级菜单和子页面的中间div的横向划分。如果是将中间div分为3块的结构,就意味着最左和最右的div宽度将成为定值,中间的div实现自适应,然后当页面小到一个定值的时候中间div变为固定宽度,实现母板页自适应。分为3块结构的弊端就在于,当子页面宽度比较大的时候,就会向下移动到最底端然后侵占最右div显示内容下面的空白区域显示。所以当子页面宽度比较大的时候就要选择2块划分。2块划分与3块划分的区别就在于是否存在最右的div。这样就腾出了显示较宽子页面的空间。实现代码详见贝克系统母板页代码,在此只列出母板页css部分如下:
<style type="text/css">
*
{
margin: 0;
padding: 0;
font-size: 1em;
}
#top
{
min-width: 872px;
_width: expression_r((document.documentElement.clientWidth||document.body.clientWidth)<872 ?"872px":"auto");
}
#main
{
border: 1px solid #A5CF3D;
height: 400px;
margin-left: 203px;
overflow: visible;
}
#left
{
border: 1px solid #A9C9E2;
height: 400px;
width: 200px;
position: absolute;
left: 0px;
}
#dyhead
{
border: 2px green;
padding: 2px;
height: 80px;
}
#dyfoot
{
border: 1px dotted green;
padding: 0;
text-align: center;
margin: 1px;
}
#center
{
margin: 1px;
padding: 0;
border: 0px solid #FF0000;
}
</style>
其中min-width: 872px; //非ie6
_width: expression_r((document.documentElement.clientWidth||document.body.clientWidth)<872 ?"872px":"auto");//ie6 使用
就是计算并规定的最小宽度,以上面代码为例当宽度小于872的时候母板页就会变为固定宽度页面。
17、页面如何嵌套入母板页实现母板页的自适应?
在extasp的控件中,panel类的容器控件是可以实现在母板页中嵌套并实现在母板页中的自适应的,所以一个子页面如果只是使用了panel类的控件,那么就不必太在意在母板页中的自适应问题了,只需要设置最外面panel的autowidth属性,为true。但是如果在子页面中出现了form类控件就要注意了,form类控件在母板页中是不能实现自适应的,因此如果要使用form类就必须规定好form的width属性,不能超过母板页中规定的最小宽度。以上面母板页中css代码为例,此时页面最小宽度为872,那么减去最左边div的宽度200和两者间的距离10,此时form的宽度最大值为662px,超过这个值,子页面就会超出母板页宽度。
18、容器控件自适应局限说明
容器控件存在自适应局限的原因是,在容器控件中加入了以百分数为限定条件的位置宽度属性,百分数设定宽度并不是大家认为的按照最外层容器的自动宽度的百分比来规定宽度的,而是给外层容器一个固定宽度来实现的,并且这个宽度值的大小如分辨率有关。因此,容器控件要使用百分比规定宽度属性的话,就必须给外层容器规定宽度。
【ExtAspNet学习笔记】ExtAspNet控件库中常见问题