ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:944.39KB ,
资源ID:30753958      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/30753958.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(二十三基于用户对修改数据进行限制.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

二十三基于用户对修改数据进行限制.docx

1、二十三基于用户对修改数据进行限制在ASP.NET 2.0中操作数据之二十三:基于用户对修改数据进行限制作者:heker2007 字体:增加减小 类型:转载 时间:2016-05-07我要评论本文主要介绍ASP.NET 2.0如何限制用户修改数据,说白了,就是如何控制权限,让有权限的人才能修改,没有权限的人只能查看数据。导言很多Web程序都支持用户帐号,根据不同的登录用户提供不同的选项,报表等功能。例如,就我们的教程中,我们要允许供应商公司的一些账户能登录网站并更新它们的产品包括产品名称和单价,或许还有供应商的信息,比如它们的公司名称,地址,以及联系人信息等等。此外,可能我们还想包含一些帐号留给

2、我们自己公司用户,以便让它们能够登录并进行产品信息修改,比如股价,级别调整等等。我们的Web程序同时也可以允许匿名登录,但是仅仅让这些用户浏览数据。并包含一个系统用户,通过对ASP.NET页面中的数据控件能够进行数据的增,改,删。在这篇教程中,我们将考察如何动态地根据不同的访问用户来调整数据的修改能力。更进一步,我们新建一个页面,通过一个可编辑的DetailsView来显示供应商信息,以及一个GridView控件列出供应商提供的产品。如果访问者来自我们公司,它们可以查看任何供应商信息,编辑他们的地址,编辑任何一个供应商提供的产品信息。然而,如果用户来自某个具体某个公司,它们只能查看和修改他们自

3、己公司的地址信息,或者修改他们那些没有缺货的商品信息。图1:一个来自我们公司的用户可以编辑任何一个供应商信息图2:一个来自某个供应商公司的他只能查看和编辑他们自己的信息让我们开始吧!注意:ASP.NET 2.0的MemberShip体系提供了一个可以创建,管理,验证用户帐号的标准的,可以扩展的平台。考虑到考察membership体系已经超出了本文的内容,本文将假设匿名用户已经通过了membership体系,可以认为他们是来自一个具体的供应商或者是我们公司。有关更多membership的内容,可以参考我的 考察ASP.Net 2.0 的Membership, Roles, Profiles文章系

4、列。第一步: 允许用户能够指定他们的访问权限在实际的Web应用程序中,一个用户的帐号信息已经包含了识别他们是来自我们公司或者供应商,而且这种信息在用户一登录之后便可以在ASP.NET中代码访问到。这个信息可以通过ASP.NET 2.0的角色体系获取,作为档案系统或者其他业务上的用户帐号信息。由于这篇教程是示范针对不同登录用户调整数据修改的能力, 并不是要凸显使用ASP.NET 2.0的membership,roles,和profile系统,我们会使用一种很简单的机制来决定用户访问网页的这种能力通过一个下拉框,用户可以选择他们想要查看或修改任何一个供应商的信息,或者是作为一个供应商,只能查看和修

5、改自己的信息。如果用户使用默认的可以查看和修改任何供应商信息,那么她分页查看所有的供应商,编辑他们的地址信息,以及编辑选择的某个供应商的产品的名字或者单价。如果选择了只能查看和编辑某个供应商的信息,那么她只能查看这个供应商的产品具体信息,更新那些没有过期的产品的名称和单价。接下来我们将要新建一个DropDownList并给它填充系统供应商信息数据。打开EditInsertDelete文件夹下的UserLevelAccess.aspx页面,添加一个DropDownList控件,设置它的ID属性为Suppliers,并绑定到一个命名为AllSuppliersDataSource的ObjectDat

6、aSource控件。图3:创建一个名为AllSuppliersDataSource的ObjectDataSource控件因为我们想要DropDownList显示所有的供应商,我们配置ObjectDataSource调用SuppliersBLL类中的GetSuppliers()方法。同时确保控件的Update()方法映射到SuppliersBLL类的UpdateSupplierAddress方法,而这个ObjectDataSource控件将同时被下一步中的DetailsView控件使用。完成ObjectDataSource的设置后,再完成设置Suppliers下拉框控件,让它的每个ListIte

7、m显示数据成员为CompanyName,数据成员的值为SupplierID。图4:配置Suppliers DropDownList使用CompanyName和SupplierID数据成员到这里,这个DropDownList列出了数据库中的所有供应商的名字。然而,我们还需要对下拉框添加一个“显示/编辑所有供应商”的选项。可以通过设置Suppliers下拉框的AppendDataBoundItem属性为true,并添加一个ListItem,设置它的Text属性为“显示/编辑所有供应商”,value属性为-1来实现。这些可以通过直接声明标记语言或者在属性窗口的设计器中点击下拉框的Item属性来添加完

8、成。注意:可以回头参考教程使用DropDownList过滤的主/从报表 获得关于添加一个下拉框中“显示所有”选项的详细讨论。通过设置AppendDataBoundItems属性和添加ListItem后,这个DropDownList的声明标记如下所示:?12345Show/Edit ALL Suppliers图5是一个当前在浏览器中操作的截图。图5:包含一个“Show ALL”的ListItem的Suppliers下拉框,以及其他每个供应商名称由于我们想让用户改变选择后,立刻更新用户界面,我们需要设置Suppliers下拉框的AutoPostBack属性值为true。在第二步中我们将创建一个De

9、tailsView控件来显示基于用户选择后显示的供应商详细信息。然后,在第三步中,我们会创建一个下拉框的SelectedIndexChanged事件的处理器,在代码里面我们将根据当前的选择来把具体的供应商信息绑定到DetailsView控件中。第二步:添加一个DetailsView控件让我们使用DetailsView控件来显示供应商信息。对于能够查看和编辑所有供应商信息的用户,这时DetailsView将支持分页,并允许用户逐个查看每个供应商资料。如果用户是其中的某个供应商,这时DetailsView将只显示当前这个供应商信息,而且不会包含分页的界面。在两种情况下,DetailsView都将允

10、许用户能够编辑所能访问到的供应商的地址,城市和国家等属性值。在Suppliers下拉框下添加一个DetailsView,并设置它的ID属性为SupplierDetails,然后把它绑定到前面创建的AllSuppliersDataSource ObjectDataSource控件。之后,在DetailsView的智能标签中打开Enable Paging和Enable Editing 的多选框。注意:如果你在DetailsView标签代码中没有看到Enable Edit属性,那是因为你没有把ObjectDataSource的Update()方法绑定到SuppliersBLL类的UpdateSupp

11、lierAddress方法。花一点事件回过去重新设置一下,然后再回来就能看到Enable Edit属性。由于SuppliersBLL类的UpdateSupplierAddress方法只允许有四个参数supplierID,address,city以及country,需要修改DetailsView的BoundFields让CompanyName和Phone两个BoundFields是read-only。此外,把SupplierID这个BoundField完全删除。最后,这个AllSuppliersDataSource控件已经含有一个OldValuesParameterFormatString属性,

12、值为original_0。再花些时间把它完全删除或者修改它的值为默认值0。通过对SupplierDetails这个DetailsView控件以及对AllSuppliersDataSource这个ObjectDataSource控件的设置,我们的代码将如下所示:?123456789101112131415161718192021222324252627这时不管在Suppliers下拉框中选择什么,DetailsView能够被分页浏览,选择的供应商的地址信息也可以被更新。(见图6)图6:任何供应商的信息都可以被查看,并且他的地址可以被更新。第三步:显示只有被选择的供应商信息我们的页面此刻不管从Su

13、ppliers下拉框中选择哪个供应商,都能看到所有的供应商信息。为了只显示选择的供应商信息,我们需要添加另外一个ObjectDataSource到页面,用来获取一个特定的供应商信息。在页面上添加一个新的ObjectDataSource控件,命名为SingleSupplierDataSource。在标签智能标签中,点击Configure Data Source的链接,让它使用SuppliersBLL类的GetSupplierBySupplierID(supplierID)方法。和AllSuppliersDataSource这个控件一样,把SingleSupplierDataSource控件的Up

14、date()方法指向到SuppliersBLL类的UpdateSupplierAdress方法。图7:配置SingleSupplierDataSource ObjectDataSource控件并使用GetSupplierBySupplierID(supplierID)方法接下来,提示我们需要为GetSupplierBySupplierID(supplierID)方法的supplierID参数指定参数来源。因为我们想要从下拉框选择的供应商来显示信息,这里我们选择Suppliers下拉框的SelectedValue属性作为参数来源。图8:使用Suppliers下拉框作为supplierID参数来源

15、即使我们添加了第二个ObjectDataSource,目前的DetailsView仍然是使用AllSuppliersDataSource这个ObjectDataSource控件。我们需要添加一些逻辑,根据选择不同的Suppliers中的供应商来调整数据源的使用。为了做到这些,可以为Suppliers下拉框添加一个SelectedIndexChanged事件的处理器。可以通过最简单地在设计器中双击下拉框完成。这个事件处理器需要决定使用什么数据源,而且需要重新绑定数据道DetailsView控件。下面是完成功能的代码:?1234567891011121314151617protected void

16、 Suppliers_SelectedIndexChanged(object sender, EventArgs e)if (Suppliers.SelectedValue = -1)/ The Show/Edit ALL option has been selectedSupplierDetails.DataSourceID = AllSuppliersDataSource;/ Reset the page index to show the first recordSupplierDetails.PageIndex = 0;else/ The user picked a particula

17、r supplierSupplierDetails.DataSourceID = SingleSupplierDataSource;/ Ensure that the DetailsView is in read-only modeSupplierDetails.ChangeMode(DetailsViewMode.ReadOnly);/ Need to refresh the DetailsViewSupplierDetails.DataBind();这个事件处理器由是否选择“显示/编辑所有的供应商“来触发。如果选择,它会设置SupplierDetails这个DetailsView控件的Da

18、taSourceID为AllSuppliersDataSource控件,并且通过指定PageIndex为0来使得用户看到这些供应商中的第一条记录。然而,如果用户从下拉框选择了一个特定的供应商,DetailsView的DataSourceID将会被设置成SingleSuppliersDataSource。不管使用哪一种数据源,SuppliersDetails将会被设置成只读模式,通过调用SuppliersDetails控件的DataBind()方法来重新绑定DetailsView的数据。通过这个事件处理器,DetailsView现在可以显示选择的供应商信息,除非选择了“显示/编辑所有的供应商“,

19、那样所有的供应商可以通过分页被浏览。图9显示了选择了“显示/编辑所有的供应商“的页面,注意分页界面的实现,允许用户访问和更新供应商信息。图10显示了选择的Ma Maison供应商信息。这种情况下只有Ma Maison的信息是可以被浏览和编辑的。图9:所有的供应商信息可以被浏览和编辑图10:只有选择的供应商信息才能被浏览和编辑注意:对于这个教程,DropDownList和DetailsView控件的EnableViewState都必须设置成默认的true,这是因为改变DropDownList的SelectedIndex和DetailsView的DataSourceID属性,必须在回传的时候被记录

20、。第四步:在一个可编辑的GridView中列出供应商信息随着DetailsView的完成,我们下一步要根据选择的供应商提供一个可以编辑的GridView。这个GridView控件应该只允许编辑ProductName和QuantityPerUnit属性。此外,如果用户是一个特定的供应商,并且访问这个页面,应该允许他能够更新那些可以没有过时的产品。为了实现这些我们首先需要给ProductBLL类添加一个重载的UpdateProducts方法,让它使用ProductID,ProductName,以及QuantityPerUnit作为输入参数。在前面的教程中我们已经做过类似的操作,所以这里我们仅看一下

21、需要添加到ProductsBLL类中的代码:?12345678910111213141516171819System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Update, false)public bool UpdateProduct(string productName, string quantityPerUnit, int productID)Northwind.ProductsDataTable products = Adapter.GetProductBy

22、ProductID(productID);if (products.Count = 0)/ no matching record found, return falsereturn false;Northwind.ProductsRow product = products0;product.ProductName = productName;if (quantityPerUnit = null)product.SetQuantityPerUnitNull();elseproduct.QuantityPerUnit = quantityPerUnit;/ Update the product

23、recordint rowsAffected = Adapter.Update(product);/ Return true if precisely one row was updated, otherwise falsereturn rowsAffected = 1;通过这个重载方法,我们可以开始添加GridView控件以及相关的ObjectDataSource控件。添加一个GridView控件到页面上,并且设置它的ID属性为ProductBySupplier,然后配置它使用新的名为ProductBySupplierDataSource的ObjectDataSource控件。因为我们想通过

24、选择供应商来使GridView显示那些产品,我们需要使用ProductBLL类的GetProductsBySupplierID(supplierID)方法。同时需要把刚刚添加的重载方法UpdateProduct映射到ObjectDataSource的Update()方法。图11:配置ObjectDataSource使用添加的UpdateProduct重载方法接下来提示要我们为GetProductsBySupplierID(supplierID)方法的supplierID输入参数选择参数源。因为我们想要在DetailsView中显示供应商的产品信息,我们使用SuppliersDetails这个D

25、etailsView控件的SelectedValue属性作为参数源。图12:使用SuppliersDetails DetailsView控件的SelectedValue属性作为参数源回到GridView中,除去ProductName,QuantityPerUnit,还有Discontinued以外的其他成员,并标记Discontinued CheckBoxField为read-only。而且,在GridView的智能标签中勾上Enable Editing这个选项。做完这些改变之后,GridView和ObjectDataSource声明标记应该和下面的相似:?12345678910111213141516171819202122232425as

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1