2010-09-30 48 views
0

我得到我仍在使用ASP型的腳本技術腳本的感覺,而不是下面的正確asp.net腳本ASP概念...試圖停止使用asp.net

如果這是真的,怎麼辦我以正確的.net方式做下面的事情?

<%@ Page Language="VB" %> 

<%@ Import Namespace="System.Data" %> 
<%@ Import Namespace="System.Data.SqlClient" %> 
<%@ Import Namespace="System.Text" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <title></title> 
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 

    <script runat="server"> 
     Dim objSQLConnection As SqlConnection 
     Dim objSQLCommand As SqlCommand 
     Dim objSQLDataReader As SqlDataReader 
     Dim sbWidget As StringBuilder 

     Dim strUser As String 

     Function getWidgets() As String 
      Dim strUserInitials() As String = Request.ServerVariables("LOGON_USER").Split(CChar("\")) 
      strUser = LCase(Trim(strUserInitials(strUserInitials.GetUpperBound(0)))).ToString() 

      sbWidget = New StringBuilder() 

      objSQLConnection = New SqlConnection(System.Configuration.ConfigurationManager.AppSettings("connString")) 

      For intColumn As Integer = 0 To 2 
       objSQLCommand = New SqlCommand("select w.widget_id, w.widget_data " & _ 
       "from widgets w " & _ 
       "inner join widget_layout wy on w.widget_id = wy.widget_id " & _ 
       "where wy.column_id = " & intColumn & " " & _ 
       "and wy.user = '" & strUser & "' " & _ 
       "and w.inactive = 0", objSQLConnection) 

       sbWidget.Append("<div class=""divWidgetColumn"" id=""divWidgetColumn_") 
       sbWidget.Append(intColumn) 
       sbWidget.Append(""">" & Environment.NewLine & vbTab & vbTab) 

       objSQLCommand.Connection.Open() 
       objSQLDataReader = objSQLCommand.ExecuteReader() 

       While objSQLDataReader.Read() 
        sbWidget.Append("<div class=""divWidget"" id=""divWidget_") 
        sbWidget.Append(objSQLDataReader("widget_id")) 
        sbWidget.Append(""">" & Environment.NewLine) 

        sbWidget.Append("<div class=""divWidgetHeader"" id=""divWidgetHeader_") 
        sbWidget.Append(objSQLDataReader("widget_id")) 
        sbWidget.Append(""">") 
        sbWidget.Append("header goes here") 
        sbWidget.Append("</div>" & Environment.NewLine) 

        sbWidget.Append("<div class=""divWidgetSubHeader"" id=""divWidgetSubHeader_") 
        sbWidget.Append(objSQLDataReader("widget_id")) 
        sbWidget.Append(""">") 
        sbWidget.Append("sub header goes here") 
        sbWidget.Append("</div>" & Environment.NewLine) 

        sbWidget.Append("<div class=""divWidgetContent"" id=""divWidgetContent_") 
        sbWidget.Append(objSQLDataReader("widget_id")) 
        sbWidget.Append(""">") 
        sbWidget.Append("content goes here") 
        sbWidget.Append("</div>" & Environment.NewLine) 

        sbWidget.Append("<div class=""divWidgetFooter"" id=""divWidgetFooter_") 
        sbWidget.Append(objSQLDataReader("widget_id")) 
        sbWidget.Append(""">") 
        sbWidget.Append("footer goes here") 
        sbWidget.Append("</div>" & Environment.NewLine) 

        sbWidget.Append("</div>" & Environment.NewLine) 
       End While 

       sbWidget.Append("</div>" & Environment.NewLine) 

       objSQLDataReader.Close() 
       objSQLCommand.Connection.Close() 
      Next intColumn 

      Return sbWidget.ToString 
     End Function 
    </script> 
    </head> 

    <body> 
     <div class="divWidgets"> 
      <%=getWidgets()%> 
     </div> 
    </body> 
</html> 

回答

1

沒有一個「正確」的方法。但是,如果你想從ASP經典和ASP.NET標籤湯中徹底打破,我建議你調查ASP.NET MVC。有關真正乾淨的表示層代碼的示例,請查看RazorSpark視圖引擎。

+0

對ASP.NET MVC的+1(或任何MVC模式) – scunliffe 2010-09-30 14:40:51

0
  • 如RedFilter建議的那樣,轉移到asp.net mvc。它的阻力比網頁表格要少得多,並且在將代碼移出視圖時有更明確的指導。
  • 閱讀關於SQL注入。使用.Parameters,實體框架,LINQ,nhibernate或其他,但停止連接像這樣的用戶sql參數。