### ASP.NET 使用过程中的若干实践经验 在开发基于ASP.NET的应用程序时,积累了一些实用的经验和技术细节,下面将针对几个具体的技术点进行详细说明。 #### 1. 获取 DataList 控件中的值 DataList 控件是一种非常有用的服务器控件,它可以显示可重复的数据,并允许用户直接与每一项进行交互。下面的示例展示了如何获取 DataList 控件中的值: ```csharp void dlstVote_UpdateCommand(object sender, DataListCommandEventArgs e) { VoteInfo vote = new VoteInfo(); vote.VoteId = Convert.ToInt64(dlstVote.DataKeys[e.Item.ItemIndex]); vote.VoteName = Globals.HtmlEncode(((TextBox)e.Item.FindControl("txtVoteName")).Text.Trim()); vote.MaxCheck = Globals.SafeInt(((TextBox)e.Item.FindControl("txtMaxCheck")).Text.Trim(), 0); } ``` 在这个例子中,`dlstVote` 是一个 DataList 控件,当用户点击该控件上的按钮时触发 `UpdateCommand` 事件。我们通过 `e.Item` 来访问当前选中项,然后找到对应的 `TextBox` 控件来获取数据。注意,这里使用了 `HtmlEncode` 方法来防止XSS攻击,确保输入的安全性。 #### 2. GridView 中获取值与 DataList 的异同 `GridView` 和 `DataList` 都是用于显示数据的控件,但它们之间存在一些差异。下面是 `GridView` 中获取值的一个例子: ```csharp void grdShoppingCart_RowCommand(object sender, GridViewCommandEventArgs e) { int rowIndex = ((GridViewRow)((Control)e.CommandSource).NamingContainer).RowIndex; int cartItemId = (int)grdShoppingCart.DataKeys[rowIndex].Value; TextBox txtBuyNum = (TextBox)grdShoppingCart.Rows[rowIndex].FindControl("txtNum"); int quantity = Globals.SafeInt(txtBuyNum.Text, 1); } ``` 在 `GridView` 中,我们可以直接通过 `RowIndex` 来定位到特定行,然后再从该行中找到所需的控件。这比 DataList 更加直观和简单。 #### 3. 页面中的 GetDataItem 方法 `Page.GetDataItem()` 是一个获取当前数据项的方法,通常在模板控件(如 `DataList` 或 `GridView`)的模板字段中使用。它返回当前正在处理的行所绑定的数据对象。例如,在 `DataList` 的模板字段中,你可以这样使用: ```csharp DataBinder.Eval(Container.DataItem, "PropertyName"); ``` 这里的 `DataItem` 就是由 `GetDataItem` 返回的对象。 #### 4. 字符串处理技巧:TrimEnd 方法 字符串处理是日常开发中必不可少的一部分。下面是一个使用 `TrimEnd` 方法去除字符串末尾指定字符的例子: ```csharp string result = value.TrimEnd('0').TrimEnd('.'); ``` 这个方法可以用来移除字符串末尾的所有零或句点。这对于处理货币等数值格式很有帮助。 #### 5. JavaScript 正则表达式验证 在客户端验证输入时,正则表达式是一个强大的工具。以下是一个使用 jQuery 和正则表达式来验证数字输入的示例: ```javascript var reg = /^\-?([1-9]\d*|0)(\.\d+)?$/; if (reg.test($("#dddd").val())) { // 验证成功 } ``` 这段代码首先定义了一个正则表达式来匹配合法的数字(包括负数和小数),然后检查输入框的值是否符合这个模式。这是确保数据完整性和格式正确性的重要步骤。 #### 6. 图片上传处理 图片上传功能是许多应用程序中常见的一部分。下面的示例展示了如何处理上传的图片并将其保存到服务器上: ```csharp void btnUploadPic_Click(object sender, EventArgs e) { string prePath = "\\Storage\\AdvImage\\"; string fileName = new Random().Next().ToString() + fudImage.FileName; HttpPostedFile file = Context.Request.Files[0]; if (file.ContentType.ToLower().StartsWith("image/")) { string name = prePath + fileName; string dir = HiContext.Current.MapPath(Globals.ApplicationPath + HiContext.Current.SiteSettings.ImageUrlPrefix + "AdvImage/"); if (!Directory.Exists(dir)) { Directory.CreateDirectory(dir); } string path = HiContext.Current.SiteSettings.ImageUrlPrefix + "AdvImage/" + fileName; file.SaveAs(HiContext.Current.Context.Request.MapPath(Globals.ApplicationPath + path)); if (imgAdv != null) { imgAdv.Visible = true; imgAdv.ImageUrl = path; } } else { ShowMsg("上传的不是图片", false); } } ``` 在这段代码中,我们首先检查上传文件的类型是否为图片,如果是,则将其保存到服务器上指定的目录中,并更新页面上的图片路径。如果不是图片,则给出提示信息。 #### 7. 类型转换方法比较 在C#中,常见的类型转换方法有 `Convert`, `Parse`, `TryParse` 等。这些方法各有特点,下面对比分析了它们之间的区别: - **Convert.ToInt32**: 当传入值为 `null` 时会默认转换为 `0`;当传入空字符串 `""` 时也会抛出异常。 - **int.Parse**: 如果传入 `null` 或者空字符串 `""`,都会抛出异常。 - **int.TryParse**: 这个方法更为安全,当转换失败时不会抛出异常,而是返回 `false` 并设置一个输出参数。 在实际应用中,`Convert.ToInt32` 更适合处理可能为 `null` 的情况,而 `int.Parse` 则适用于确信输入有效的场景。`int.TryParse` 则是处理不确定输入的最佳选择。 #### 8. OnDataBinding 事件的利用 `OnDataBinding` 事件是在数据绑定之前发生的事件,可以用来预先加载数据或者设置一些属性。以下是如何利用该事件来获取页面的数据项: ```csharp protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { // 加载数据 } } protected void GridView1_OnDataBinding(object sender, EventArgs e) { GridView gv = (GridView)sender; DataBinder.Eval(gv.DataItem, "PropertyName"); } ``` 在这个例子中,我们可以在 `OnDataBinding` 事件中使用 `DataBinder.Eval` 来获取绑定的数据项。需要注意的是,如果绑定的数据源为空或者数据项为 `DBNull.Value`,则需要特别处理以避免错误发生。 以上就是在 ASP.NET 开发过程中积累的一些实用经验和技巧,希望对大家有所帮助。
- 粉丝: 1
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助