zl程序教程

您现在的位置是:首页 >  后端

当前栏目

一天精通asp.net的学习经验小结

NetASP学习 精通 小结 经验 一天
2023-06-13 09:14:16 时间
1、Validator
2、IsPostBack
3、AutoPostBack。控件离开焦点的时候自动Post。
4、repeater控件的使用。:Repeater控件比以前版本的asp.net好用了,只要Eval就可以了,不用DataBinder.Eval(container.DataItem,"***"):了,只要Eval("Name")就可以,注意不能丢了前面的“#”。
<asp:RepeaterID="Repeater1"runat="server">
<HeaderTemplate>
嘎嘎嘎
</HeaderTemplate>
<ItemTemplate>
<%#Eval("Name")%>
<%#Eval("Desc")%>
</ItemTemplate>
</asp:Repeater>

protectedvoidButton3_Click(objectsender,EventArgse)
{
List<Person>list=newList<Person>();
list.Add(newPerson(){Name="芭芭拉",Desc="白牙呗"});
list.Add(newPerson(){Name="奥巴马",Desc="黑黝黑"});
Repeater1.DataSource=list;
Repeater1.DataBind();
}
5、DataList控件:
(1)行的高亮选中
<asp:DataListID="DataList1"runat="server">
<SelectedItemStyleBackColor="#FF6666"/>
<ItemTemplate>
<%#Eval("Name")%>
<%#Eval("Desc")%>
<asp:LinkButtonID="LinkButton1"runat="server"Text="选择"CommandName="select"/>
</ItemTemplate>
</asp:DataList>
核心是CommandName这个属性,可选值还有edit、delete等可选值,当按钮被点击的时候将会执行EditCommand、DeleteCommand等事件。
(2)行的在位编辑:
<asp:DataListID="DataList1"runat="server"
oneditcommand="DataList1_EditCommand">
<SelectedItemStyleBackColor="#FF6666"/>
<EditItemTemplate>
<asp:TextBoxrunat="server"ID="t1"Text="<%#Eval("Name")%>"/>
<asp:TextBoxrunat="server"ID="t2"Text="<%#Eval("Desc")%>"/>
<asp:Buttonrunat="server"Text="提交"CommandName="update"/>
</EditItemTemplate>
<ItemTemplate>
<%#Eval("Name")%>
<%#Eval("Desc")%>
<asp:LinkButtonID="LinkButton1"runat="server"Text="编辑"CommandName="edit"/>
</ItemTemplate>
</asp:DataList>

protectedvoidDataList1_EditCommand(objectsource,DataListCommandEventArgse)
{
DataList1.EditItemIndex=e.Item.ItemIndex;
ReBind();
}

privatevoidReBind()
{
List<Person>list=newList<Person>();
list.Add(newPerson(){Name="芭芭拉",Desc="白牙呗"});
list.Add(newPerson(){Name="奥巴马",Desc="黑黝黑"});
Repeater1.DataSource=list;
Repeater1.DataBind();

DataList1.DataSource=list;
DataList1.DataBind();
}
(3)行的在位编辑并且提交修改
<asp:DataListID="DataList1"runat="server"
oneditcommand="DataList1_EditCommand"
onupdatecommand="DataList1_UpdateCommand">
<SelectedItemStyleBackColor="#FF6666"/>
<EditItemTemplate>
<asp:TextBoxrunat="server"ID="t1"Text="<%#Eval("Name")%>"/>
<asp:TextBoxrunat="server"ID="t2"Text="<%#Eval("Desc")%>"/>
<asp:Buttonrunat="server"Text="提交"CommandName="update"/>
</EditItemTemplate>
<ItemTemplate>
<%#Eval("Name")%>
<%#Eval("Desc")%>
<asp:LinkButtonID="LinkButton1"runat="server"Text="编辑"CommandName="edit"/>
</ItemTemplate>
</asp:DataList>
publicpartialclass_Default:System.Web.UI.Page
{
protectedvoidPage_Load(objectsender,EventArgse)
{
if(Session["PersonList"]==null)
{
List<Person>list=newList<Person>();
list.Add(newPerson(){Name="芭芭拉",Desc="白牙呗"});
list.Add(newPerson(){Name="奥巴马",Desc="黑黝黑"});
Repeater1.DataSource=list;
Repeater1.DataBind();
Session["PersonList"]=list;
}
}

protectedvoidDataList1_EditCommand(objectsource,DataListCommandEventArgse)
{
DataList1.EditItemIndex=e.Item.ItemIndex;
ReBind();
}

privatevoidReBind()
{
DataList1.DataSource=Session["PersonList"];
DataList1.DataBind();
}

protectedvoidDataList1_UpdateCommand(objectsource,DataListCommandEventArgse)
{
TextBoxnT1=e.Item.FindControl("t1")asTextBox;
TextBoxnT2=e.Item.FindControl("t2")asTextBox;
//不要直接从DataList1.DataSource中取,因为取到的是null
List<Person>list=Session["PersonList"]asList<Person>;
PersoncurPerson=list[DataList1.EditItemIndex];
curPerson.Name=nT1.Text;
curPerson.Desc=nT2.Text;
DataList1.EditItemIndex=-1;
ReBind();
}
}
6GridView控件
<asp:GridViewID="GridView1"runat="server"AllowSorting="True"
AutoGenerateColumns="False"onrowcommand="GridView1_RowCommand"
onsorting="GridView1_Sorting">
<Columns>
<asp:ButtonFieldButtonType="Button"CommandName="DingGou"HeaderText="订购"
ShowHeader="True"Text="订购"/>
<asp:ButtonFieldButtonType="Button"CommandName="TuiDing"HeaderText="退订"
ShowHeader="True"Text="退订"/>
<asp:BoundFieldDataField="Name"HeaderText="名称"SortExpression="Name"/>
<asp:BoundFieldDataField="Desc"HeaderText="描述"SortExpression="Desc"/>
</Columns>
</asp:GridView>

protectedvoidGridView1_RowCommand(objectsender,GridViewCommandEventArgse)
{
if(e.CommandName=="DingGou")
{
Debug.WriteLine("第"+e.CommandArgument+"行被订购");
}
}

protectedvoidGridView1_Sorting(objectsender,GridViewSortEventArgse)
{

}
7、用户控件(UserControl)
通过向导创建一个UserControl,然后就可以任意编辑这个UserControl,而且还可以为UserControl增加属性、事件。使用的时候只要将控件直接从SolutionExplorer拖到页面上就可以。
8、继承控件
(1)通过向导创建一个WebCustomControl。
(2)定义自己应用界面。需要重载从Control类继承来的CreateChildControls方法,并在其中生成界面控件。如果用户定义的控件会在一个页面中反复使用,最好implementsSystem.Web.UI.INamingContainer,它会为该控件创建一个唯一的命名空间。
(3)定义自己控件的消息处理函数。自己定义的控件含有两种类型的消息,一是包含的子控件所产生的消息,二是自定义的控件消息。
9、向工程中添加“GlobalApplicationClass”就可以添加Global.asax,在这里可以监听Application、Session的生命周期。
10、(1)Response.Redirect("newpage.aspx");客户端转发
(2)Server.Transfer("newpage.aspx");服务器端转发
11、web.config配置
(1)<appSettings>
<addkey="FTP"value="127.0.0.1"/>
</appSettings>
this.Title=WebConfigurationManager.AppSettings["FTP"];
(2)
<connectionStrings>
<addname="mydb"connectionString="jdbc:ddd"/>
</connectionStrings>
this.Title=WebConfigurationManager.ConnectionStrings["mydb"].ConnectionString;
12、BulletedList就是<ul><ol>
13、PostBack本质论
ASP.NETalsoaddstwoadditionalhiddeninputfieldsthatareusedtopassinformation
backtotheserver.ThisinformationconsistsoftheIDofthecontrolthatraisedtheeventand
anyadditionalinformationthatmightberelevant.Thesefieldsareinitiallyempty,asshown
here:
<inputtype="hidden"name="__EVENTTARGET"id="__EVENTTARGET"value=""/>
<inputtype="hidden"name="__EVENTARGUMENT"id="__EVENTARGUMENT"value=""/>
The__doPostBack()functionhastheresponsibilityforsettingthesevalueswiththe
appropriateinformationabouttheeventandthensubmittingtheform.Aslightlysimplified
versionofthe__doPostBack()functionisshownhere:
<scriptlanguage="text/javascript">
function__doPostBack(eventTarget,eventArgument){
vartheform=document.Form1;
theform.__EVENTTARGET.value=eventTarget;
theform.__EVENTARGUMENT.value=eventArgument;
theform.submit();
}
</script>
14、跨页表单提交
在页1中指定按钮的PostBackUrl属性为WebForm1.aspx,这样表单就会提交到WebForm1.aspx了,然后在WebForm1.aspx中还可以取到前一页中所有的值:
TextBox1.Text=PreviousPage.Title;
还可以将PreviousPagecast成更详细的页面子类。
15、取QueryString的方法:
Request.QueryString["recordID"]
16、Server.UrlEncode(lstItems.SelectedItem.Text)
17、Multiview控件用来实现动态界面,Multiview里嵌套多个view控件,每个view控件里可以方式其他控件。通过控制Multiview控件的ActiveViewIndex属性来控制不同View的显示。
18、Wizard控件比Multiview控件更方面,更像一个TabControl
19、动态图片:
在pageload的事件中:
Bitmapimage=newBitmap(300,50);
Graphicsg=Graphics.FromImage(image);
Response.ContentType="image/png";
image.Save(Response.OutputStream,
System.Drawing.Imaging.ImageFormat.Gif);
20页面导航
创建SiteMap文件,修改SiteMap文件增加节点。
在页面上增加一个SiteMapDataSource,然后只要拖TreeView、Menu、SiteMapPath等控件上来,指定DataSource属性为SiteMapDataSource就可以了。
21单值绑定
URL="Images/picture.jpg";
this.DataBind();
<asp:CheckBoxid="chkDynamic"Text="<%#URL%>"runat="server"/>
22下拉列表框绑定
<asp:DropDownListID="DropDownList1"runat="server"DataTextField="value"
DataValueField="key">
</asp:DropDownList>
IDictionary<string,string>dict=newDictionary<string,string>();
dict["1"]="aa";
dict["2"]="bb";
DropDownList1.DataSource=dict;
DropDownList1.DataBind();
23设定起始页:在aspx上点右键,选择“Setasstartpage”
24程序中数据库连接字符串的设置
(1)、web.config中加入:
<connectionStrings>
<addname="DBConnectionString"connectionString="server=192.168.88.128\SQLEXPRESS1;uid=sa;pwd=123456;database=CRM"providerName="System.Data.SqlClient"/>
</connectionStrings>
(2)、在IDE中拖放DataSource组件以后,在属性视图的ConnectionString属性中选择DBConnectionString即可。
(3)、程序中读取这个连接字符串的方法:
System.Configuration.ConfigurationrootWebConfig=
System.Web.Configuration.WebConfigurationManager.OpenWebConfiguration("~");
stringconnString=
rootWebConfig.ConnectionStrings.ConnectionStrings["DBConnectionString"].ConnectionString;
24制作简单的CRUD页面的步骤:
(1)拖放一个SqlDataSource组件上来,设定好ConnectionString,命名组件为dsList。
(2)修改SqlDataSource组件的DeleteQuery属性为:deletefromT_PSI_UserwhereFId=@FId
InsertQuery属性为:INSERTINTOT_PSI_User(FId,FUserName,FPassword)VALUES(NEWID(),@FUserName,@FPassword)
SelectQuery为:select*fromT_PSI_User
UpdateQuery为:UpdateT_PSI_UsersetFUserName=@FUserName,FPassword=@FPasswordwhereFId=@FId
(3)拖放一个GridView组件上来,设定其DataSourceID属性为dsList。修改AllowPaging、AllowSorting、AutoGenerateDeleteButton、AutoGenerateEditButton属性为True。设定AutoGeneratedColumns属性为false。设定DataKeyNames属性为FId(这样哪怕隐藏了FId字段,Edit、delete功能也能正常执行了)
(4)修改GridView的Columns属性,在弹出的对话框中点击【RefreshSchema】链接,这样在BoundField下就显示了FId、FName、FPassword三个字段,将FUserName和FPassword字段Add进来。
这样不用一行代码,有删、改功能的页面就做好了。下面来做“增”的功能。
(5)选择GridView组件,在智能提示中选择EditTemplete、然后选择“EmptyTemplete”,拖放一个FormView组件到EmptyTemplete中,选中Formview组件,在智能提示中设定DataSource为dsList。
(6)新建一个【新增】按钮,编辑其Click事件代码为:
GridView1.DataSourceID="";
GridView1.DataBind();
(7)设定FormView的ItemInserted事件代码为:
RefreshList();
RefreshList()函数定义如下:
GridView1.DataSourceID="dsList";
GridView1.DataBind();
这样“增”的功能就做好了,不过还是有缺憾,那就是显示出了不归我们管的FId字段,并且字段名、按钮都是英文的。
(8)选中,FormView组件,然后点击EditTemplete,选中InsertTemplete,这样就可以删除不需要的FId字段了,并且可以修改控件布局以及界面的语言文字。
(9)这样的话Insert界面中的“Cancel取消”按钮还是不能用,编辑FormView1的ItemCommand事件,编写如下的代码:
if(e.CommandName=="Cancel")
{
RefreshList();
}
25上面实现CRUD的方法有两个缺陷:
(1)需要编写一个EmptyTemplete
(2)很难对Edit的控件做定制
因此我们还是用ListUI和EditUI分置的方法来解决。步骤:
制作ListUI:
(1)使用datasource、GridView,不过DataSource只要配置SelectQuery、DeleteQuery即可。
(2)GridView不自动生成Edit按钮。
(3)GridView生成一个ButtonField,标题为“编辑”,CommandName="EditInPage"
protectedvoidGridView1_RowCommand(objectsender,GridViewCommandEventArgse)
{
if(e.CommandName=="EditInPage")
{
intindex=Convert.ToInt32(e.CommandArgument);
Guidguid=(Guid)GridView1.DataKeys[index].Value;
Server.Transfer("/Sys/SysUserEdit.aspx?Action=Edit&FId="+guid);
}
}
(4)新增按钮的Onclick事件:
Server.Transfer("/Sys/SysUserEdit.aspx?Action=Insert");

制作EditUI:
(1)拖一个DataSouce控件,按常规配置InsertCommand和UpdateCommand,配置SelectCommand为“SELECT*FROM[T_PSI_User]where1<>1”,配置UpdateCommand为“”
(2)拖一个FormView上来,并且修改EditTemplete和InsertTemplte(可以直接将EditTemplete修改后的拷贝到InsertTemplte,注意不要忘了修改Button的CommandName)
(3)代码;
protectedvoidPage_Load(objectsender,EventArgse)
{
switch(Request["Action"])
{
case"Edit":
dsEdit.SelectCommand="select*fromT_PSI_UserwhereFId=@FId";
dsEdit.SelectParameters.Clear();
dsEdit.SelectParameters.Add("FId",Request["FId"]);
FormView1.ChangeMode(FormViewMode.Edit);
break;
case"Insert":
FormView1.ChangeMode(FormViewMode.Insert);
break;
}
}

protectedvoidFormView1_ItemInserted(objectsender,FormViewInsertedEventArgse)
{
GogoList();
}

protectedvoidFormView1_ItemUpdated(objectsender,FormViewUpdatedEventArgse)
{
GogoList();
}

privatevoidGogoList()
{
Server.Transfer("/Sys/SysUserList.aspx");
}
}
}
26、DropDownList实现基础资料选择器,比如在商品编辑中的选择计量单位:
(1)拖一个针对T_MeasureUnit表的DataSource,比如名字为dsMeasureUnit。
(2)拖一个商品的Datasource,比如dsMerchan。
(3)拖一个FormView上来,并且设定其DataSource为dsMerchan
(4)将一个DropDownList放到FormView中,因为只有这样才能设定DropDownList本身的绑定。
(5)选中DropDownList,在智能提示中选择“ConfigDateSource”,在这里配置上dsMeasureUnit。
(6)选中DropDownList,在智能提示中选择“EditDataBindings”,然后设定绑定到dsMerchan的FMeasureUnitId字段。