APSNET沈士根实验报告五Word文件下载.docx
《APSNET沈士根实验报告五Word文件下载.docx》由会员分享,可在线阅读,更多相关《APSNET沈士根实验报告五Word文件下载.docx(19页珍藏版)》请在冰点文库上搜索。
port="
25"
userName="
/>
/smtp>
/mailSettings>
③在Admin文件夹下,建立用于实现Admin文件夹授权的Web.config,代码如下:
<
?
xmlversion="
1.0"
encoding="
utf-8"
system.web>
authorization>
--允许Admin角色中用户访问Admin文件夹-->
allowroles="
Admin"
/>
--拒绝Member角色中用户反问Admin文件夹-->
denyroles="
Member"
--拒绝匿名用户访问Admin文件夹-->
denyusers="
/authorization>
/system.web>
/configuration>
1.修改ProShow.aspx和ProShow.aspx.cs。
①备份原先的ProShow.aspx和ProShow.aspx.cs文件。
需要注意的是,本步骤不是必须的,但建议养成在修改文件之前先备份文件夹的习惯。
②在ProShow.aspx的源视图中,将光标定位在<
form...>
和<
div>
两个标记间,添加一个<
section>
/section>
③切换到设计视图,在<
header>
元素中添加一个用于布局的三行四列表格,再向相应的单元格中添加一个Image、三个LinkButton控件和一个LoginView控件,输入您的位置。
并设置相应的ID属性和相应的样式。
如下图1所示。
④设置LoginView控件的ID属性值为logvHeader。
单击logvHeader的智能标记,选择编辑RoleGroups选项,在呈现的对话框中添加如图2,所示的2个角色。
图1
图2
⑤单击logvHeader的智能标记,选择AT视图,输入“您还未登录!
”;
选择RoleGroup[0]-Admin视图,添加一个LoginName控件、两个LinkButton控件和一个LoginStatus控件;
选择RoleGroup[0]-Member视图,添加一个LoginName控件、两个LinkButton控件和一个LoginStatus控件,各控件属性设置后的效果如图:
9.设计NewUser.aspx
在源视图中,将ProShow.aspx中的整个<
元素复制到<
两个标记间。
将原来的<
/div>
更改为<
。
在<
元素中添加一个CreateUserWizard控件。
最终设计界面如图:
CreateUserWizard控件
的属性设置见书本。
需要注意的是,MailDefinition属性集中的From属性值应根据Web.config文件的<
元素中的邮箱信息进行设置。
10.编写NewUser.aspx.cs中的方法代码
在NewUser.aspx.cs中,添加lnkbtnRegister和lnkbtnLogin链接按钮被单击后触发Click事件时执行的方法代码。
当成功注册用户后,触发CreateUserWizard1.CreateUser事件,执行的方法代码如下:
protectedvoidCreateUserWizard1_CreatedUser(objectsender,EventArgse)
{
Roles.AddUserToRole(CreateUserWizard1.UserName,"
);
}
11.在源视图中,将ProShow.aspx中的整个<
元素中添加一个Login控件。
如图:
13.设计GetPwd.aspx
元素中添加一个PasswordRecovery控件。
设计后如图:
设置PasswordRecovery控件的MailDefinition属性集中的BodyFileName属性值为~/GetPwd.txt,MailDefinition属性集中的其他属性设置参考第9部NewUser中的设置。
14.设计ChangePwd.aspx
元素中添加一个LoginView控件。
21.编写RolesUsers.aspx.cs中的方法代码
添加lnkbtnRegister和lnkbtnLogin链接按钮被单击后触发Click事件时执行的方法代码。
页面首次载入时,将绑定所以角色到lstRoles和所有用户到lstUsers。
页面往返后,将判断当前是否已选择角色,若是,则调用自定义方法GetUsersInRole()显示已选择角色中的用户,执行的方法代码如下:
protectedvoidPage_Load(objectsender,EventArgse)
if(!
IsPostBack)
string[]roles=Roles.GetAllRoles();
lstRoles.DataSource=roles;
lstRoles.DataBind();
MembershipUserCollectionusers=Membership.GetAllUsers();
lstUsers.DataSource=users;
lstUsers.DataBind();
if(lstRoles.SelectedItem!
=null)
GetUsersInRole();
}
Click事件,将选中的用户添加到选中的角色中,执行的方法代码如下:
protectedvoidbtnToRole_Click(objectsender,EventArgse)
if(lstRoles.SelectedItem==null)
lblMsg.Text="
请选择角色!
;
return;
if(lstUsers.SelectedItem==null)
请选择用户!
string[]newUsers=newstring[lstUsers.GetSelectedIndices().Length];
for(inti=0;
i<
newUsers.Length;
i++)
newUsers[i]=lstUsers.Items[lstUsers.GetSelectedIndices()[i]].Value;
try
Roles.AddUsersToRole(newUsers,lstRoles.SelectedValue);
catch(Exceptionee)
lblMsg.Text=ee.Message;
当单击“从角色中删除”链接按钮,在删除gvUsers中所在行之前,触发RowDeleting事件,此时,需要从角色中删除相应的用户,执行的方法代码如下:
protectedvoidgvUsers_RowDeleting(objectsender,GridViewDeleteEventArgse)
GridViewRowgridViewRow=gvUsers.Rows[e.RowIndex];
LabellblName=(Label)gridViewRow.Cells[0].FindControl("
lblName"
stringusername=lblName.Text;
Roles.RemoveUserFromRole(username,lstRoles.SelectedValue);
从角色中删除用户时的错误:
+ee.GetType().ToString();
实验10
1.设计并实现用于显示商品分类和数量的用户控件
①建立Category.ascx
打开MyPetShop网站,在网站根文件夹下建立UserControl子文件夹,再在该子文件夹中添加Web用户控件Category.ascx
②设计Category.ascx
在设计视图中添加一个GridView控件,设置ID属性值为gvCategory、AutoGenerateColumns属性值为False。
其他用于定义格式的属性参考书本图的效果进行设置
gvCategory控件的Columns属性值设置如图,添加HyperLinkField和BoundField字段各一个。
HyperLinkField和BoundField字段的属性设置见书本
③编写Category.ascx.cs中的方法代码
MyPetShopDataContextdb=newMyPetShopDataContext();
varcategories=fromcindb.Category
joinpindb.Productonc.CategoryIdequals
p.CategoryIdintoproduct
selectnew
c.CategoryId,
c.Name,
ProductCount=product.Count()
};
gvCategory.DataSource=categories;
gvCategory.DataBind();
④测试Category.ascx
2.利用母版页重新设计MyPetShop网站中的各个页面
①设计母版页MasterPage.master
(1)在MyPetShop网站根文件夹中添加母版页MasterPage.master
(2)选择格式->
附加样式表命令,将网站根文件夹下的Style\TableDiv.css附加到母版页
(3)删除<
form>
元素中系统自动添加的<
层。
(4)将实验9中的ProShow.aspx页面的整个<
元素中,修改lnkbtnDefault控件的PostBackUrl属性值为Default.aspx
(5)在<
/header>
标记下面添加<
元素,之后再<
元素中添加一个用于布局的1行2列表格,分别在表格的两个单元格中添加一个ContentPlaceHolder控件并分别设置ID属性值为cphLeft和cphRight。
④编写ProShow.aspx.cs中的方法代码
在所有方法外声明一个MyPetShopDataContext类实例,使得该方法能多次调用
MyPetShopDataContextdb=newMyPetShopDataContext();
protectedvoidPage_Load(objectsender,EventArgse)
{
Bind();
自定义的Bind方法,首先判断QueryString数据集合中的CategoryId值是否为空值,若非空,则查找该CategoryId值对应分类中的所有商品并绑定到gvProduct,否则将Product表中的所以商品绑定到gvProduct。
protectedvoidBind()
if(Request.QueryString["
ProductId"
]!
=null)
intproductId=int.Parse(Request.QueryString["
]);
varproducts=frompindb.Product
wherep.ProductId==productId
selectp;
gvProduct.DataSource=products;
gvProduct.DataBind();
CategoryId"
intcategoryId=int.Parse(Request.QueryString["
wherep.CategoryId==categoryId
当改变gvProduct的当前页时触发PageIndexChanging事件,设置新的页面索引值,并重新显示包含的商品,执行的方法代码如下:
protectedvoidgvProduct_PageIndexChanging(objectsender,GridViewPageEventArgse)
gvProduct.PageIndex=e.NewPageIndex;
System.Threading.Thread.Sleep(3000);
⑤预览效果
3.利用Web部件技术设计网站首页
①以MasterPage.master为母版,新建内容页Default.aspx
其中ContentPlaceHolderID属性值为cphLeft的<
asp:
Content>
元素中添加控件Category.ascx,再在ContentPlaceHolderID属性值为cphRight的<
元素中添加一个用于布局的2行3列表格。
在表格中添加控件。
板鞋Default.aspx.cs中的方法代码
当页面载入时的Page_Load事件:
if(!
foreach(WebPartDisplayModemodeinMyPartManager.DisplayModes)
if(mode.IsEnabled(MyPartManager))
ddlMode.Items.Add(mode.Name);
inti=1;
foreach(WebPartpartinMyPartManager.WebParts)
if(partisGenericWebPart)
part.Title=string.Format("
控件{0}"
i);
i++;
}
当选择下拉列表框中的不同模式值时,触发SelectedIndexChanged事件,此时,需要修改MyPartManager.DisplayMode的值来改变页面模式,代码如下
protectedvoidddlMode_SelectedIndexChanged(objectsender,EventArgse)
MyPartManager.DisplayMode=MyPartManager.DisplayModes[ddlMode.SelectedValue];
4.设计并应用主题
①设计Blue主题
在网站中添加一个Blue主题,向Blue主题对应的文件夹中分别添加外观文件Blue.skin、样式表文件Blue.css和子文件夹Images。
在Images中添加两个图片文件Loge.gif,Bar.jpg
在Blue.skin文件中输入代码如下:
Imagerunat="
server"
ImageUrl="
images/logo.jpg"
SkinID="
logo"
BorderStyle="
Double"
BorderWidth="
2px"
Font-Italic="
True"
ForeColor="
Blue"
在Blue.css文件中输入样式代码如下
body{
form{font-size:
12px;
table{width:
100%
.navigation{text-align:
center;
background-color:
#C8E3FF;
.status{background-color:
#C1FFFF;
.position{background-color:
#5B6DB5;
background-image:
url(Images/logo.jpg);
②应用Blue主题
(1)为避免冲突,分别复制MasterPage.master和Default.aspx到网站根文件夹下的ThemeMasterPage.master和ThemeDefault.aspx
(2)将ThemeMasterPage.master中的imgLogo控件的SkinID属性值设置为logo。
(3)将ThemeDefault.aspx中@Page指令的MasterPageFile和Theme属性值分别设置为~/ThemeMasterPage.master和Blue。
(4)查看效果
实验11
3.利用TreeView控件显示所有的商品分类及包含的商品
①设计用户控件PetTree.ascx
在MyPetShop网站的UserControl文件夹中添加一个用户控件PetTree.ascx,切换到设计视图,添加一个TreeView控件,设置其ID属性值为tvProduct、ExpandDepth属性值为0.
②编写PetTree.ascx.cs中的方法代码
载入页面时触发Page_Load事件,若为首次载入,则调用自定义方法BindTree()将所有的商品分类添加到TreeView控件的父节点中,执行的方法代码如下:
BindTree();
自定义方法BindTree()的代码如下:
protectedvoidBindTree()
selectc;
foreach(varcategoryincategories)
TreeNodetreeNode=newTreeNode();
treeNode.Text=category.Name;
treeNode.Value=category.CategoryId.ToString();
treeNode.NavigateUrl="
~/ProShow.aspx?
CategoryId="
+category.CategoryId.ToString();
tvProduct.Nodes.Add(treeNode);
BindTreeChild(treeNode,category.CategoryId);
自定义方法BindTreeChild()将制定分类下的所以商品添加到该分类节点下。
代码如下:
protectedvoidBindTreeChild(TreeNodetn,intcategoryId)
wherep.Category.CategoryId==categoryId
foreach(varproductinproducts)
treeNode.Text=product.Name;
treeNode.Value=product.ProductId.ToString();
ProductId="
+product.ProductId.ToString();
tn.ChildNodes.Add(treeNode);
③修改ProShow.aspx
先备份再打开ProShow.aspx,切换到设计视图,删除用户控件Category.ascx。
将用户控件PetTree.ascx拖到用户控件Category.ascx所处的位置。
最终的设计界面如图所示:
④修改ProShow.aspx.cs中的方法代码