设为首页收藏本站language 语言切换
查看: 1425|回复: 0
收起左侧

ASP.NET中新的代码编译功能(二)

[复制链接]
发表于 2010-2-25 10:31:54 | 显示全部楼层 |阅读模式
<p >上一篇:《ASP.NET中新的代码编译功能(一)》<p ><b>利息计算器</b><p >首先,我们打开 Visual Studio .NET Whidbey,创建一个名为 Compilation 的新 Web 站点。创建 Web 站点之后,IDE 应与图 1 类似。<p ><center><img  src="http://www.hh010.com/upload_files/article/244/9_t7cnhv270856.gif"><p >图 1:Visual Studio .NET Whidbey Web 站点</center><p >然后,我们将 \Code 文件夹添加到该 Web 站点,添加方法为右击该项目,然后选择 New Folder(新建文件夹)。此文件夹必须命名为 Code,但名称不区分大小写。添加文件夹后,我们可以添加一个新的类文件:右击 \Code 文件夹,单击 Add New Item...(添加新项...),然后在 Add New Item(添加新项)对话框的 Templates(模板)窗格中选择 Class(类)项。将类命名为 CalculateInterest.vb。然后添加用于计算利息的代码(将其添加到 Class 和 End Class 语句之间):<p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2"  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>ublic Function CalcBalance(ByVal Prncpl As Integer, _                        ByVal Rate As Double, _                        ByVal Years As Integer, _                        ByVal Period As Integer) As String    Dim BaseNum As Double = (1 + Rate / Period)    CalcBalance = _        Format(Prncpl * System.Math.Pow(BaseNum, _        (Years * Period)), &quot;#,###,##0.00&quot;).ToStringEnd Function</ccid_code></pre></td></tr></table></ccid_nobr><p >创建组件类后,我们需要修改 Default.aspx 页面以提供用来输入数据的字段,还需要调用组件的 CalcBalance 方法。为了简单起见,Default.aspx 的完整列表显示如下(请注意,Default.aspx 使用单文件代码模型)。<p >Default.aspx:<p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2"  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>&lt;%@ page language=&quot;VB&quot; %&gt;&lt;script runat=&quot;server&quot;&gt;        Sub Button1_Click(ByVal sender As Object, _        ByVal e As System.EventArgs)        Dim Calc As New CalculateInterest        Label6.Text = &quot;$&quot; &amp; _            Calc.CalcBalance(Convert.ToInt32(TextBox1.Text), _                (Convert.ToInt32(TextBox2.Text) / 100), _                Convert.ToInt32(TextBox3.Text), _                Convert.ToInt16(Dropdownlist1.SelectedValue))        Label6.Visible = True    End Sub&lt;/script&gt;&lt;html&gt;&lt;head runat=&quot;server&quot;&gt;    &lt;title&gt; 利息计算器&lt;/title&gt;&lt;/head&gt;&lt;body&gt;    &lt;form runat=&quot;server&quot;&gt;        &lt;asp:label id=&quot;Label1&quot;             runat=&quot;server&quot;&gt本金 ($):&lt;/asp:label&gt;        &lt;asp:textbox id=&quot;TextBox1&quot; runat=&quot;server&quot;&gt;        &lt;/asp:textbox&gt;        &lt;br /&gt;        &lt;asp:label id=&quot;Label2&quot;             runat=&quot;server&quot;&gt;利率 (%):&lt;/asp:label&gt;        &lt;asp:textbox id=&quot;TextBox2&quot; runat=&quot;server&quot;&gt;        &lt;/asp:textbox&gt;        &lt;br /&gt;        &lt;asp:label id=&quot;Label3&quot; runat=&quot;server&quot;&gt;年数:&lt;/asp:label&gt;        &lt;asp:textbox id=&quot;TextBox3&quot; runat=&quot;server&quot;&gt;        &lt;/asp:textbox&gt;        &lt;br /&gt;        &lt;asp:label id=&quot;Label4&quot;             runat=&quot;server&quot;&gt;复利频率:&lt;/asp:label&gt;        &lt;asp:dropdownlist id=&quot;Dropdownlist1&quot; runat=&quot;server&quot;&gt;            &lt;aspistItem Value=&quot;1&quot;&gt;每年&lt;/aspistItem&gt;            &lt;aspistItem Value=&quot;4&quot;&gt;每季&lt;/aspistItem&gt;            &lt;aspistItem Value=&quot;12&quot;&gt;每月&lt;/aspistItem&gt;            &lt;aspistItem Value=&quot;365&quot;&gt;每日&lt;/aspistItem&gt;        &lt;/asp:dropdownlist&gt;        &lt;br /&gt;        &lt;asp:label id=&quot;Label5&quot;             runat=&quot;server&quot;&gt;结余: &lt;/asp:label&gt;        &lt;asp:label id=&quot;Label6&quot;             visible=&quot;false&quot; runat=&quot;server&quot;&gt;&lt;/asp:label&gt;        &lt;br /&gt;        &lt;asp:button id=&quot;Button1&quot;             runat=&quot;server&quot; text=&quot;计算&quot; onclick=&quot;Button1_Click&quot; /&gt;    &lt;/form&gt;&lt;/body&gt;&lt;/html&gt;</ccid_code></pre></td></tr></table></ccid_nobr><p >在设计视图中,修改后的 Default.aspx 应与图 2 类似。<p ><center><img  src="http://www.hh010.com/upload_files/article/244/9_f8bgow270857.gif"><p >图 2:设计视图中的 Default.aspx</center><p >需要注意是,当您在用于调用组件类的 <脚本> 块中键入代码时,将获得完整的 IntelliSense 语句完成(包括组件类),如图 3 所示。这是在 Visual Studio .NET 2003 基础上的一大改进,Visual Studio .NET 2003 不支持服务器端 <脚本> 块中的 IntelliSense。<p ><center><img  src="http://www.hh010.com/upload_files/article/244/9_jvyomu270858.gif"><p >图 3:源视图中的 IntelliSense</center><p >浏览 Default.aspx 会生成图 4 中所示的输出。填入本金、利率和年数,然后单击 Calculate(计算),输出结果应与图 5 类似。<p ><center><img  src="http://www.hh010.com/upload_files/article/244/9_pyjmrf270859.gif"><p >图 4:Default.aspx 的初始输出</center><p ><center><img  src="http://www.hh010.com/upload_files/article/244/9_kkm3do270860.gif"><p >图 5:计算后的输出</center><p ><b>资源文件</b> 如果您以前在 Visual Studio .NET 2002 或 2003 中使用过 Web 应用程序,您一定已经注意到每次创建新 Web 窗体页时,除了 .aspx 页以及 .vb 或 .cs 模块化文件之外,Visual Studio 还会创建一个具有 .resx 扩展名的匹配文件(即 WebForm1.aspx.resx)。与大多数 Web 开发人员一样,您可能也会忽略或试图删除这些文件,因为它们的用途和/或用法并不是很直观。简言之,这些 .resx 文件称为“资源文件”,主要用于存储各个版本的资源,例如用于本地化的不同语言的文本字符串。<p >在 Visual Studio .NET 2002 和 2003 中,资源文件需要作为生成项目进程的一部分添加到项目程序集中,并且需要导入两个命名空间,创建一个 ResourceManager 对象,并调用其 GetString 方法以访问资源字符串。在 \Code 目录的帮助下,Visual Studio .NET Whidbey 中的资源访问过程变得非常简单,如下面的示例所示。<p >我们先从创建资源文件开始,还是使用上一个示例中的项目。首先,右击刚才创建的 Compilation Web 站点,然后单击 Add New Item...(添加新项...)。在 Add New Item(添加新项)对话框中,选择 Assembly Resource File(程序集资源文件)模板,将资源文件命名为 strings.resx,然后单击 Open(打开)。strings.resx 文件的默认视图应与图 6 类似。<p ><center><img  src="http://www.hh010.com/upload_files/article/244/9_fizwwq270861.gif"><p >图 6:在 XML 编辑器中编辑资源文件</center><p >将以下项添加到数据表中(可以将“comment”(注释)、“type”(类型)和“mimetype”(MIME 类型)列保留为空):<p ><ccid_nobr><TABLE border="1"><TR><TD>名称</TD><TD>值 </TD></TR><TR><TD>txtColorPrompt</TD><TD>请选择一种颜色:</TD></TR><TR><TD>txtColorResponseGreen</TD><TD>您选择了绿色!</TD></TR><TR><TD>txtColorResponseBlue</TD><TD>您选择了蓝色!</TD></TR><TR><TD>txtColorResponseRed</TD><TD>您选择了红色!</TD></TR></TABLE></ccid_nobr><p >现在重复上述过程,添加一个名为 strings.en-GB.resx 的新资源文件,并将以下项添加到其数据表中,然后保存文件(因为我们没有添加 txtColorResponse* 的项,所以所有客户机都将使用 strings.resx 中的这些项的值):<p ><ccid_nobr><TABLE border="1"><TR><TD>名称</TD><TD>值 </TD></TR><TR><TD>txtColorPrompt</TD><TD>请选择一种颜色:</TD></TR></TABLE></ccid_nobr><p >现在,为了充分利用 Code 目录的神奇作用,我们需要将这两个 .resx 文件从 Web 站点的根目录拖到 Code 目录中。完成上述操作后,将得到类似图 7 的结果。<p ><center><img  src="http://www.hh010.com/upload_files/article/244/9_ezmuq1270862.gif"><p >图 7:Code 目录中的 .resx 文件</center><p >为了说明现在使用创建的资源文件是多么简单,我们将一个 Web 窗体添加到项目中,方法如下:右击 Web 站点节点,然后单击 Add New Item....(添加新项...)。在 Add New Item(添加新项)对话框中,选择 Web 窗体,将页面命名为 ColorPicker.aspx,然后单击 Open(打开)。修改此页面,使其与以下列表匹配。<p >ColorPicker.aspx:<p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2"  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>&lt;%@ page UICulture=&quot;en-GB&quot; language=&quot;VB&quot; %&gt;&lt;script runat=&quot;server&quot;&gt;        Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)        Label1.Text = Resources.strings.txtColorPrompt    End Sub        Sub Submit_Click(ByVal sender As Object, _        ByVal e As System.EventArgs)        Label1.ForeColor = _            System.Drawing.Color.FromName(Dropdownlist1.SelectedValue)        Select Case Dropdownlist1.SelectedValue            Case &quot;红色&quot;                Label1.Text = Resources.strings.txtColorResponseRed            Case &quot;绿色&quot;                Label1.Text = Resources.strings.txtColorResponseGreen            Case &quot;蓝色&quot;                Label1.Text = Resources.strings.txtColorResponseBlue        End Select        Dropdownlist1.Visible = False        Submit.Visible = False    End Sub&lt;/script&gt;&lt;html&gt;&lt;head runat=&quot;server&quot;&gt;    &lt;title&gt;颜色选取器&lt;/title&gt;&lt;/head&gt;&lt;body&gt;    &lt;form runat=&quot;server&quot;&gt;        &lt;asp:label id=&quot;Label1&quot; runat=&quot;server&quot;&gt;Label&lt;/asp:label&gt;        &lt;asp:dropdownlist id=&quot;Dropdownlist1&quot; runat=&quot;server&quot;&gt;            &lt;asp:listitem value=&quot;Red&quot;&gt;红色&lt;/asp:listitem&gt;            &lt;asp:listitem value=&quot;Green&quot;&gt;绿色&lt;/asp:listitem&gt;            &lt;asp:listitem value=&quot;Blue&quot;&gt;蓝色&lt;/asp:listitem&gt;        &lt;/asp:dropdownlist&gt;        &lt;asp:button id=&quot;Submit&quot;             text=&quot;提交&quot; runat=&quot;Server&quot; onclick=&quot;Submit_Click&quot; /&gt;    &lt;/form&gt;&lt;/body&gt;&lt;/html&gt;</ccid_code></pre></td></tr></table></ccid_nobr><p >当从浏览器中浏览 ColorPicker.aspx 时,默认输出与图 8 类似。如果从为英国用户设置的系统中浏览此页面(您可以通过将页面的 UICulture 属性设置为“en-GB”并保存页面来模拟此情形),输出将与图 9 类似(请注意,我们已经在“colour”中添加了 u)。<p ><center><img  src="http://www.hh010.com/upload_files/article/244/9_vjktwv270863.gif"><p >图 8:ColorPicker.aspx 的默认输出</center><p ><center><img  src="http://www.hh010.com/upload_files/article/244/9_vxnk4z270864.gif"><p >图 9:英国系统的 ColorPicker.aspx 输出</center><p >请注意,在 ASP.NET Whidbey 中访问资源文件只需要一行代码。因为将资源文件放到 Code 目录中后,即可自动嵌入和引用该资源文件,所以不需要引用任何命名空间或程序集,也不需要为访问资源字符串创建对象。而且 ASP.NET 还可以确定应该使用哪个资源文件(基于用户浏览器的设置),因此我们不需要在运行时对此进行判断并作出相应的响应。ASP.NET 可以帮助我们完成这一切。<p >下一篇:《ASP.NET中新的代码编译功能(三)》<p >                                 <p align="center"></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-6 18:17 , Processed in 0.057714 second(s), 23 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表