您的位置:首页 > 编程语言 > C#

C# WEB开发的几个问题的解决

2009-07-28 09:43 357 查看
不论用什么语言来做WEB系统,遇到问题是难免的事。刚开始比较生,所有问题有好像很难解决。后来熟了,只要看一眼抛出的异常,就知道发生了什么问题。但有些问题,因在以前没做过,所以要费尽心思才能解决。下面的四个问题,有的是自己灵光一现想到的,也有的是借鉴别人的做法做到的。记在这里,以备不忘。

1 关于绕过验证的按钮的问题。

如果页面上有多个按钮,也有多个验证控件。但我们只是想提交其中的一部分完成某个操作后,再提交剩下的。那么第一个提交按钮就必须绕过验证,否则提交不了。此时就把第一人按钮的 CausesValidation 属性设置为"False" 即可。

2 关于多个 TextBox 一起输入的问题。

有时候客户需要我们一次输入多个多个输入,免去多次输入的繁琐。这时我们可以使用GridView。它不仅仅是显示数据的工具,也可以在显示数据的地方添加多个输入控件。同时还可以对这些控件进行验证。具体代码如下:

<asp:GridView ID="GridLoad" runat="server" Width="80%" EmptyDataText="没有数据!" AutoGenerateColumns="False"
AllowPaging="False" AllowSorting="False" SkinID="GridViewSkin" DataKeyNames="ID,ComName"
DataMember="ID,ComName" OnRowDataBound="GridLoad_RowDataBound">
<Columns>
<asp:BoundField DataField="ID" HeaderText="单位" />
<asp:TemplateField HeaderText="今年最大负荷(MW)">
<ItemTemplate>
<asp:TextBox ID="LoaMaxLoad" runat="server" Width="100px" Text=''></asp:TextBox>
<asp:RequiredFieldValidator ID="V_LoaMaxLoad_0" runat="server" ControlToValidate="LoaMaxLoad"
ErrorMessage="请输入数值!"></asp:RequiredFieldValidator>
<asp:RangeValidator ID="V_LoaMaxLoad" ControlToValidate="LoaMaxLoad" Type="Double"
runat="server" ErrorMessage="请输入数字!"></asp:RangeValidator>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="本月县域供电量(万kWh)">
<ItemTemplate>
<asp:TextBox ID="LoaLoad" runat="server" Width="100px" Text=''></asp:TextBox>
<asp:RequiredFieldValidator ID="V_LoaLoad_0" runat="server" ControlToValidate="LoaLoad"
ErrorMessage="请输入数值!"></asp:RequiredFieldValidator>
<asp:RangeValidator ID="V_LoaLoad" ControlToValidate="LoaLoad" Type="Double" runat="server"
ErrorMessage="请输入数字!"></asp:RangeValidator>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>


当然这还不是关键问题。关键的问题是如何在后台取到这些值。我们可以先看一下此页面的源文件,发现动态的TextBox的生成虽然不太直白,但还是有规律可依,根据这些规律,我们就可以取到它们的值。

for (int i = 0; i < this.GridLoad.Rows.Count; i++)
{
//取每行数据的ID
model.LoaComID = Convert.ToInt32(this.GridLoad.DataKeys[i].Values[0]);
//根据控件的名字取值
string LoaMaxLoad_Name = "GridLoad$ctl" + (i + 2).ToString().PadLeft(2, '0') + "$LoaMaxLoad";
string LoaLoad_Name = "GridLoad$ctl" + (i + 2).ToString().PadLeft(2, '0') + "$LoaLoad";
double LoaMaxLoad = Convert.ToDouble(Request.Form[LoaMaxLoad_Name]);
double LoaLoad = Convert.ToDouble(Request.Form[LoaLoad_Name]);
}


3.关于下拉框的验证问题。

我一直都不太喜欢写JavaScript,因为写起来很麻烦。但是毫无疑问,把验证放在页面上的好处是所有人都喜欢的。下拉框的后台验证是很简单的,但我接触了C#的验证控件后,想了想还是可以放在前台的。代码如下:

<asp:CompareValidator ID="V_TraID" runat="server" ControlToValidate="TraID" ErrorMessage="请选择主变!"
Operator="GreaterThan" Type="Integer" ValueToCompare="0"></asp:CompareValidator>


4 利用按钮来激发TextBox的点击事件。

有时候我们需要对用户已经填写的部分数据进行处理之后,显示一个处理结果在页面上,给用户一个明确的交待,然后再提交所有的数据。如果处理的结果要填写在 TextBox 里,但我们发现C#的TextBox并没有onclick事件。这个时候我们可以这样进行处理:

<asp:TextBox ID="LoaMaxGrowthRate" runat="server" onclick="document.getElementById('Button1').click();" Width="200px" AutoPostBack="True"></asp:TextBox>
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" CausesValidation="False" Width="0px" />


注意button的宽度我们设置为0。

然后我们在后台写下代码:

protected void Button1_Click(object sender, EventArgs e)
{
//do something
this.LoaMaxGrowthRate.Text = LoaMaxGrowthRate + "%";
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: