ASP.NET Webform 生成器





5.00/5 (8投票s)
当提供连接字符串和表名时,此工具将读取字段数据类型,并为您创建 asp 控件,以便复制并粘贴到您自己的项目中。
引言
很多时候,我发现自己在不同的项目中重新创建类似的 Web 表单。即使将我以前的代码复制粘贴到新项目中也需要修改。所以,作为一名懒人,在一个晚上有空闲时间,我决定编写一个小工具来帮助解决这个问题。您提供一个连接字符串和一个表名,它将根据该表和数据类型生成 asp 控件。
它还会根据列名生成 asp 标签,并将它们关联到相应的文本框、文本区域、复选框等。我想要添加的另一个很棒的功能是支持 JQuery 的日期选择器。如果在数据库中找到 datetime 字段类型,将创建一个带有相应标签的文本框(就像任何其他 varchar 数据类型一样),但它还会生成日期选择器所需的 JavaScript。
使用代码
实现起来非常简单。确保您引用了 JQuery 库。(我在我的项目中使用了版本 1.5,但它也应该可以很好地与较新版本一起工作)
将此代码放在页面的 javascript 部分。(您实际上不需要错误检查部分,但我还是把它放进去了。)
function ErrorCheck() { $("#<%=txtASPCode.ClientID %>").val(""); $("#<%=txtJquery.ClientID %>").val(""); TrimAllTextboxes(); if ($("#<%=txtConnString.ClientID %>").val() == "") { alert("Connection string can not be blank."); return false; } return true; } function TrimAllTextboxes() { $("input[type=text], textarea").each( function () { $(this).val($.trim($(this).val())); }); }
并将此代码复制/粘贴到表单标签中
<asp:Label ID="lblConString" runat="server" Text="Connection String"></asp:Label>: <asp:TextBox ID="txtConnString" runat="server" style="width:600px"></asp:TextBox><br /> <asp:Label ID="lblTableName" runat="server" Text="Table Name (Optional)"></asp:Label>: <asp:TextBox ID="txtTableName" runat="server" style="width:300px"></asp:TextBox><br /> <asp:Label ID="lblDatePickerOptions" runat="server" Text="JQuery Datepicker Options (Optional)"></asp:Label>: <asp:TextBox ID="txtJQueryDatepickerOptions" runat="server" style="width:300px"></asp:TextBox><br /> <asp:Button ID="btnGenerate" runat="server" Text="Generate!" OnClientClick="ErrorCheck();" CausesValidation="true" /><br /><br/> <h1>ASP Code:</h1> <asp:TextBox ID="txtASPCode" runat="server" TextMode="MultiLine" Rows="20" style="width:100%"></asp:TextBox> <h1>JQuery Code:</h1> <asp:TextBox ID="txtJquery" runat="server" TextMode="MultiLine" Rows="20" style="width:100%"></asp:TextBox>
并且在代码隐藏文件中,有一些导入
Imports System.Data.SqlClient
Imports System.Data
其余代码都在 btnGenerate.Click 中
Try
Dim Script As New StringBuilder
Script.Append("SELECT table_name, column_name,data_type,character_maximum_length,column_default FROM information_schema.columns where table_name not like '%aspnet_%' and table_name not in( 'sysdiagrams') ")
'if they specified a table name, filter by that
If Not String.IsNullOrEmpty(Me.txtTableName.Text) Then
Script.AppendFormat(" and table_name='{0}' ", Me.txtTableName.Text)
End If
Script.Append("ORDER BY table_name, ordinal_position")
Dim ASPCode As New StringBuilder
Dim JQueryCode As New StringBuilder
Using SelectCommand As New SqlCommand
With SelectCommand
.Connection = New SqlConnection(Me.txtConnString.Text)
.CommandType = CommandType.Text
.CommandText = Script.ToString
.Connection.Open()
Using dr As SqlDataReader = .ExecuteReader
While dr.Read
Dim TableName As String = dr("table_name")
Dim DataType As String = dr("data_type").tolower
Dim DataLength As String = IIf(dr("character_maximum_length") Is DBNull.Value, "", dr("character_maximum_length"))
Dim ColumnName As String = dr("column_name")
Dim ColumnDefault As String = IIf(dr("column_default") Is DBNull.Value, "", dr("column_default")).ToString.TrimStart("(").TrimEnd(")").TrimStart("'").TrimEnd("'")
Dim AssociatedControlPrefix = ""
Dim Control As String = ""
'only show the table name if it isn't already shown
If Not ASPCode.ToString.Contains(String.Format("<h1>{0}</h1>", TableName)) Then
ASPCode.AppendFormat("<h1>{0}</h1>{1}", TableName, Environment.NewLine)
End If
'doing this with if instead of case as there are several date type of data types
If DataType = "bit" Then
'asp checkbox
AssociatedControlPrefix = "chkBox"
Control = String.Format("<asp:CheckBox ID=""{0}{1}"" Checked=""{2}"" runat=""server"" />", AssociatedControlPrefix, ColumnName, IIf(ColumnDefault = "((1))", "true", "false")) 'if the default value isn't null then set the checked equal to the default value
ElseIf DataType.Contains("date") Then
'textbox with jquery to bind as date picker
AssociatedControlPrefix = "txt"
Control = String.Format("<asp:TextBox ID=""{0}{1}"" runat=""server""></asp:TextBox>", AssociatedControlPrefix, ColumnName)
JQueryCode.AppendFormat("$(""#<%={0}{1}.ClientID%>"").datepicker({2});{3}", AssociatedControlPrefix, ColumnName, Me.txtJQueryDatepickerOptions.Text, Environment.NewLine)
Else
AssociatedControlPrefix = "txt"
If String.IsNullOrEmpty(DataLength) OrElse Not IsNumeric(DataLength) Then
'no max length
Control = String.Format("<asp:TextBox ID=""{0}{1}"" runat=""server"">{2}</asp:TextBox>", AssociatedControlPrefix, ColumnName, ColumnDefault)
Else
'varchar(max) or blob or ntexts etc
If (DataLength = -1 AndAlso DataType = "varchar") OrElse DataType = "ntext" OrElse DataType = "text" Then
Control = String.Format("<asp:TextBox ID=""{0}{1}"" runat=""server"" TextMode=""MultiLine"">{2}</asp:TextBox>", AssociatedControlPrefix, ColumnName, ColumnDefault)
Else
'textbox with a max length for everything else
Control = String.Format("<asp:TextBox ID=""{0}{1}"" runat=""server"" MaxLength=""{2}"">{3}</asp:TextBox>", AssociatedControlPrefix, ColumnName, DataLength, ColumnDefault)
End If
End If
End If
Dim Label As String = String.Format("<asp:Label ID=""lbl{0}"" runat=""server"" Text=""{1}"" AssociatedControlID=""{2}{3}""></asp:Label>", ColumnName, ColumnName, AssociatedControlPrefix, ColumnName)
ASPCode.AppendFormat("{0}:{1}<br/>{2}", Label, Control, Environment.NewLine)
End While
End Using
.Connection.Close()
End With
Me.txtASPCode.Text = ASPCode.ToString
If Not String.IsNullOrEmpty(JQueryCode.ToString) Then
Me.txtJquery.Text = String.Format("<script language=""javascript"" type=""text/javascript"">{0}$(document).ready(function(){{{0}{1}}});{0}</script>", Environment.NewLine, JQueryCode.ToString)
End If
End Using
Catch ex As Exception
Response.Write(ex.Message)
End Try
关注点
我开玩笑地告诉我的朋友,程序员(通常)是懒人,但他们最终也会想出有用的工具来节省时间。基本上,这个小项目的想法就来自这里。
我希望它对您有所帮助,并能减少您的开发时间。:)