『壹』 U8 還原資料庫出錯,無法打開所登錄請求資料庫,如何解決
因為你的程序連接字元串了。
SQLServer網路配置的TCP/IP協議是否已經是否啟用,檢查資料庫連接字元竄是否准確。
單擊「開始」--「所有程序」--「Microsoft SQL Server」--「企業管理器」在打開的「控制台根目錄」 選擇相應的資料庫,右擊該資料庫的中的「用戶」,選擇「新建資料庫用戶」。在「新建用戶」對話 框中點擊「登陸名」右側的下拉列表框,選擇「新建」,打開「新建登陸對話框」。點擊名稱右側的 省略號按鈕,在打開的對話框中將「列出的名稱」中選擇「本機的名稱」,再在下面的名稱框中選定「Remote Desktop Users」,然後點擊「成員」按鈕,雙擊 ASPNET然後點擊確定,在「新建登陸對話 框」中的默認設置的「資料庫」選項中選擇相應的資料庫名稱,再在「資料庫訪問」選項下勾選相應 的資料庫點擊確定
『貳』 ASP.NET Web Page應用深入探討
一 伺服器腳本基礎介紹
首先 我們先復習一下Web伺服器頁面的基本執行方式
客戶端通過在瀏覽器的地址欄敲入地址來發送請求到伺服器端
伺服器接收到請求之後 發給相應的伺服器端頁面(也就是腳本)來執行 腳本產生客戶端的響應 發送回客戶端
客戶端瀏覽器接收到伺服器傳回的響應 對Html進行解析 將圖形化的網頁呈現在用戶面前
對於伺服器和客戶端的交互 通常通過下面幾種主要方式
Form 這是最主要的方式 標准化的控制項來獲取用戶的輸入 Form的提交將數據發送給伺服器端處理
QueryString 通過在Url後面帶參數達到將參數傳送給伺服器 這種方式其實跟Get方式的Form是一樣的
Cookies 這是一種比較特殊的方式 通常用於用戶身份的確認
二 ASP Net簡介
傳統的伺服器腳本語言 如ASP jsP等 編寫伺服器腳本的方式大同小異 都是在Html中嵌入解釋或編譯執行的代碼 由伺服器平台執行這些代碼來生成Html 對於這類似的腳本 頁面的生存周期實際上很簡單 就是從開頭至末尾 執行完所有的代碼 當然用java編寫的Servlet可以編寫更復雜的代碼 但是從結構上看 和JSP沒什麼區別
ASP Net的出現 打破了這種傳統 ASP Net採用了CodeBehind技術和伺服器端控制項 加入了伺服器端的事件的概念 改變了腳本語言編寫的模式 更加貼近Window編程 使Web編程更加簡單 直觀 但是我們要看到 ASP Net本身並沒有改變Web編程的基本模式 只是封裝了一些細節 提供了一些易用的功能 使代碼更容易編寫和維護 從某種程度上來說 將伺服器端執行的方式復雜化了 這就是我們今天要討論的主體 ASP Net Web Page的生存周期
三 ASP Net請求處理模式
我們說 ASP Net的Web Page並沒有脫離Web編程的模式 所以它仍然是以 請求 >接收請求 >處理請求 >發送響應 這樣的模式在工作 每一次與客戶端的交互都會引發一次新的請求 所以一個Web Page的生命周期是以一次請求為基礎的
當IIS收到客戶端的請求的時候 會將請求交給aspnet_wp這個進程來處理 這個進程會查看請求的應用程序域是否存在 如果不存在則會創建一個 然後會創建一個Http運行時(HttpRuntime)來處理請求 這個運行時 為當前應用程序提供一組 ASP NET 運行時服務 (摘自MSDN)
HttpRuntime在處理請求的時候 會維護一系列的應用程序實例 也就是應用程序的Global類(global asax)的實例 這些實例在沒有請求的時候 會存放在一個應用程序池中(實際上應用程序池由另一個類來維護 HttpRuntime只是簡單的調用) 每接收到一個請求 HttpRuntime都會獲取一個閑置的實例來處理請求 這個實例在請求結束前不會處理其他的請求 處理完畢之後 它又會回到池中 一個實例在其生存期內被用於處理多個請求 但它一次只能處理一個請求 (摘自MSDN)
當應用程序實例處理請求的時候 它會創建請求頁面類的實例 執行它的ProcessRequest方法來處理請求 這個方法也就是Web Page生命周期的開始
四 Aspx頁面與CodeBehind
在深入了解頁面的生命周期之前 我們先來探討一些Aspx與CodeBehind之間的關系
<%@ Page language= c# Codebehind= WebForm aspx cs Inherits= MyNamespace WebForm %>
相信使用過CodeBehind技術的朋友 對ASPX頂部的這句話應該是非常熟悉了 我們來一項一項的分析它
Page language= c# 這個就不用多說了吧
Codebehind= WebForm aspx cs 這一句表示綁定的代碼文件
Inherits= MyNamespace WebForm 這句非常重要 它表示頁面繼承的類名稱 也就是CodeBehind的代碼文件中的類 這個類必須從System Web WebControls Page派生
從上面我們可以分析出 實際上CodeBehind中的類就是頁面(ASPX)的基類 到這里 可能有些朋友要問了 在編寫ASPX的時候 完全是按照ASP的方式 在Html中嵌入代碼或者嵌入伺服器控制項 沒有看到所謂 類 的影子啊?
這個問題實際上並不復雜 各位使用ASP Net編程的朋友可以到你們的系統盤 WINDOWSMicrosoft NETFramework<版本號>Temporary ASP NET Files這個目錄下 這個下面就放了所有本機上存在的ASP Net應用程序的臨時文件 子目錄的名稱就是應用程序的名稱 然後再下去兩層(為了保證唯一 ASP Net自動產生了兩層子目錄 並且子目錄名稱是隨機的) 然後我們會發現有很多類似 yfy gjhc dll xeunj u dll 這樣的鏈接庫以及 komee bp cs falckav cs 這樣的源文件 實際上這就是ASPX被ASP Net動態編譯後的結果 打開這些源文件我們可以發現
public class WebForm_aspx MyNamespace WebForm System Web SessionState IRequiresSessionState
這就印證了我們前面的說法 ASPX是代碼綁定類的子類 它的名稱是ASPX文件名加上 _aspx 後綴 通過研究這些代碼我們可以發現 實際上所有aspx中定義的伺服器控制項都是在這些代碼中生成的 然後動態產生這些代碼的時候 把原來在ASPX中嵌入的代碼寫在了相應的位置
當某個頁面第一次被訪問的時候 Http運行時就會使用一個代碼生成器去解析ASPX文件並生成源代碼並編譯 然後以後的訪問就直接調用編譯後的dll 這也是為什麼ASPX第一次訪問的時候非常慢的原因
解釋了這個問題 我們再來看另一個問題 我們在使用代碼綁定的時候 在設計頁面拖一個控制項 然後切換到代碼視圖 就可以直接在Page_Load中使用這個控制項了 既然控制項是在子類中產生的 那為什麼在父類中可以直接使用呢?
實際上我們可以發現 每當用VS Net拖一個控制項到頁面上 代碼綁定文件中總是會類似這樣的添加一個聲明
protected System Web WebControls Button Button
我們可以發現這個欄位被聲明成protected 而且名字與ASPX中控制項的ID一致 仔細想一想 這個問題就迎刃而解了 我們前面提到ASPX的源代碼是被生成器動態生成和編譯的 生成器會產生動態生成每一個伺服器控制項的代碼 在生成的時候 它會檢查父類有沒有聲明這個控制項 如果聲明了 它會添加類似下面的一句代碼
this DataGrid = __ctrl
這個__ctrl就是生成該控制項的變數 這時候它就把控制項的引用賦給了父類中相應的變數 這也是為什麼父類中的聲明必須為protected(實際上也可以為public) 因為要保證子類能夠調用
然後在執行Page_Load的時候 因為這時候父類的聲明已經被子類中的初始化代碼賦了值 所以我們就可以使用這個欄位來訪問對應的控制項 了解了這些 我們就不會犯在代碼綁定文件中的構造器里使用控制項 造成空引用的異常的錯誤了 因為構造器是最先執行的 這時候子類的初始化還沒有開始 所以父類中的欄位是空值 至於子類是什麼時候初始化我們放到後面討論
五 頁面生存周期
現在回到第三個標題中講到的內容 我們講到了HttpApplication的實例接收請求 並創建頁面類的實例 實際上這個實例也就是動態編譯的ASPX的類的一個實例 上一個標題中我們了解到ASPX實際上是代碼綁定中類的子類 所以它繼承了所有的protected方法
現在我們來看看VS Net自動生成的CodeBehind類的代碼 以此來開始我們對頁面生命周期的探討
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{ // // CODEGEN 該調用是 ASP NET Web 窗體設計器所必需的
// InitializeComponent() base OnInit(e) }
/// <summary> /// 設計器支持所需的方法 不要使用代碼編輯器修改/// 此方法的內容
/// </summary>
private void InitializeComponent()
{ this DataGrid ItemDataBound += new System Web UI WebControls DataGridItemEventHandler(this DataGrid _ItemDataBound)
this Load += new System EventHandler(this Page_Load) }
#endregion
這個就是使用VS Net產生的Page的代碼 我們來看 這裡面有兩個方法 一個是OnInit 一個是InitializeComponent 後者被前者調用 實際上這就是頁面初始化的開始 在InitializeComponent中我們看到了控制項的事件聲明和Page的Load聲明
下面是從MSDN中摘錄的一段描述和一個頁面生命周期方法和事件觸發的順序表
每次請求 ASP NET 頁時 伺服器就會載入一個 ASP NET 頁 並在請求完成時卸載該頁 頁及其包含的伺服器控制項負責執行請求並將 HTML 呈現給客戶端 雖然客戶端和伺服器之間的通訊是無狀態的和斷續的 但是必須使客戶感覺到這是一個連續執行的過程
這種連續性假象是由 ASP NET 頁框架 頁及其控制項實現的 回發後 控制項的行為必須看起來是從上次 Web 請求結束的地方開始的 雖然 ASP NET 頁框架可使執行狀態管理相對容易一些 但是為了獲得連續性效果 控制項開發人員必須知道控制項的執行順序 控制項開發人員需要了解 在控制項生命周期的各個階段 控制項可使用哪些信息 保持哪些數據 控制項呈現時處於哪種狀態 例如 在填充頁上的控制項樹之前控制項不能調用其父級 下表提供了控制項生命周期中各階段的高級概述 有關詳細信息 請點擊表中的鏈接
階段 控制項需要執行的操作 要重寫的方法或事件初始化 初始化在傳入 Web 請求生命周期內所需的設置 請參閱處理繼承的事件 Init 事件(OnInit 方法)
載入視圖狀態 在此階段結束時 就會自動填充控制項的 ViewState 屬性 詳見維護控制項中的狀態中的介紹 控制項可以重寫 LoadViewState 方法的默認實現 以自定義狀態還原 LoadViewState 方法處理回發數據 處理傳入窗體數據 並相應地更新屬性 請參閱處理回發數據
注意 只有處理回發數據的控制項參與此階段 LoadPostData 方法 (如果已實現IPostBackDataHandler)
載入 執行所有請求共有的操作 如設置資料庫查詢 此時 樹中的伺服器控制項已創建並初始化 狀態已還原並且窗體控制項反映了客戶端的數據 請參閱處理繼承的事件 Load 事件(OnLoad 方法)
發送回發更改通知 引發更改事件以響應當前和以前回發之間的狀態更改 請參閱處理回發數據
注意 只有引發回發更改事件的控制項參與此階段 RaisePostDataChangedEvent 方法(如果已實現 IPostBackDataHandler)
處理回發事件 處理引起回發的客戶端事件 並在伺服器上引發相應的事件 請參閱捕獲回發事件
注意 只有處理回發事件的控制項參與此階段 RaisePostBackEvent 方法(如果已實現 IPostBackEventHandler)
預呈現 在呈現輸出之前執行任何更新 可以保存在預呈現階段對控制項狀態所做的更改 而在呈現階段所對的更改則會丟失 請參閱處理繼承的事件 PreRender 事件(OnPreRender 方法)
保存狀態 在此階段後 自動將控制項的 ViewState 屬性保持到字元串對象中 此字元串對象被發送到客戶端並作為隱藏變數發送回來 為了提高效率 控制項可以重寫 SaveViewState 方法以修改 ViewState 屬性 請參閱維護控制項中的狀態 SaveViewState 方法呈現 生成呈現給客戶端的輸出 請參閱呈現 ASP NET 伺服器控制項 Render 方法處置 執行銷毀控制項前的所有最終清理操作 在此階段必須釋放對昂貴資源的引用 如資料庫鏈接 請參閱 ASP NET 伺服器控制項中的方法
Dispose 方法卸載 執行銷毀控制項前的所有最終清理操作 控制項作者通常在 Dispose 中執行清除 而不處理此事件 UnLoad 事件(On UnLoad 方法)
從這個表裡面我們可以清楚的看到一個Page從裝載到卸載之間調用的方法和觸發的時間 接下來我們就深入的對其進行一些分析
看了上面的表 細心的朋友可能要問了 既然OnInit是頁面生命周期的開始 而我們在上一講中談到控制項在子類中被創建 那麼在這里實際上在InitializeComponent方法中我們已經可以使用父類中聲名的欄位了 那麼就意味著子類的初始化更在這之前?
在第三個標題中我們講到了頁面類的ProcessRequest才是真正意義上的頁面聲明周期的開始 這個方法是由HttpApplication調用的(其中調用的方式比較復雜 有機會單獨撰文來講解) 一個Page對請求的處理就是從這個方法開始 通過反編譯 Net類庫來查看源代碼 我們發現在System Web WebControls Page的基類 System Web WebControls TemplateControl(它是頁面和用戶控制項的基類)中定義了一個 FrameworkInitialize 虛擬方法 然後在Page的ProcessRequest中最先調用了這個方法 在生成器生成的ASPX的源代碼中我們發現了這個方法的蹤影 所有的控制項都在這個方法中被初始化 頁面的控制項樹就在這個時候產生
接下來的事情就簡單了 我們來逐步分析頁面生命周期的每一項
初始化
初始化對應Page的Init事件和OnInit方法
如果要重寫 MSDN推薦的方式是重載OnInti方法 而不是增加一個Init事件的代理 這兩者是有差別的 前者可以控制調用父類OnInit方法的順序 而後者只能在父類的OnInit後執行(實際上是在OnInit裡面被調用的)
載入視圖狀態
這是個比較重要的方法 我們知道 對於每次請求 實際上是由不同的頁面類實例來處理的 為了保證兩次請求間的狀態 ASP Net使用了ViewState
LoadViewState方法就是從ViewState中獲取上一次的狀態 並依照頁面的控制項樹的結構 用遞歸來遍歷整個樹 將對應的狀態恢復到每一個控制項上
處理回發數據
這個方法是用來檢查客戶端發回的控制項數據的狀態是否發生了改變 方法的原型
public virtual bool LoadPostData(string postDataKey NameValueCollection postCollection)
postDataKey是標識控制項的關鍵字(也就是postCollection中的Key) postCollection是包含回發數據的集合 我們可以重寫這個方法 然後檢查回發的數據是否發生了變化 如果是則返回一個True 如果控制項狀態因回發而更改 則 LoadPostData 返回 true 否則返回 false 頁框架跟蹤所有返回 true 的控制項並在這些控制項上調用 RaisePostDataChangedEvent (摘自MSDN)
這個方法是System Web WebControls Control中定義的 也是所有需要處理事件的自定義控制項需要處理的方法 對於我們今天討論的Page來說 可以不用管它
載入
載入對應Load事件和OnLoad方法 對於這個事件 相信大多數朋友都會比較熟悉 用VS Net生成的頁面中的Page_Load方法就是響應Load事件的方法 對於每一次請求 Load事件都會觸發 Page_Load方法也就會執行 相信這也是大多數人了解ASP Net的第一步
Page_Load方法響應了Load事件 這個事件是在System Web WebControl Control類中定義的(這個類是Page和所有伺服器控制項的祖宗) 並且在OnLoad方法中被觸發
很多人可能碰到過這樣的事情 寫了一個PageBase類 然後在Page_Load中來驗證用戶信息 結果發現不管驗證是否成功 子類頁面的Page_Load總是會先執行 這個時候很可能留下一些安全性的隱患 用戶可能在沒有得到驗證的情況下就執行了子類中的Page_Load方法
出現這個問題的原因很簡單 因為Page_Load方法是在OnInit中被添加到Load事件中的 而子類的OnInit方法中是先添加了Load事件 然後再調用base OnInit 這樣就造成了子類的Page_Load被先添加 那麼先執行了
要解決這個問題也很簡單 有兩種方法
) 在PageBase中重載OnLoad方法 然後在OnLoad中驗證用戶 然後調用base OnLoad 因為Load事件是在OnLoad中觸發 這樣我們就可以保證在觸發Load事件之前驗證用戶
) 在子類的OnInit方法中先調用base OnInit 這樣來保證父類先執行Page_Load
發送回發更改通知
這個方法對應第 步的處理回發數據 如果處理回發數據返回True 頁面框架就會調用此方法來觸發數據更改的事件 所以自定義控制項的回發數據更改事件需要在此方法中觸發
同樣這個方法對於Page來說 沒有太大的用處 當然你也可以在Page的基礎上自己定義數據更改的事件 這當然也是可以的
處理回發事件
這個方法是大多數伺服器控制項事件引發的地方 當請求中包含控制項事件觸發的信息時(伺服器控制項的事件是另一個論題 我會在不久將來另外撰文討論) 頁面控制項會調用相應控制項的RaisePostBackEvent方法來引發伺服器端的事件
這里又引出一個常見的問題
經常有網友問 為什麼修改提交後的數據並沒有更改
多數的情況都是他們沒有理解伺服器事件的觸發流程 我們可以看出 觸發伺服器事件是在Page的Load之後 也就是說頁面會先執行Page_Load 然後才會執行按鈕(這里以按鈕為例)的點擊事件 很多朋友都是在Page_Load中綁定數據 然後在按鈕事件中處理更改 這樣做有一個毛病 Page_Load永遠都是在按鈕事件之前執行 那麼意味著數據還沒來得及更改 Page_Load中的數據綁定的代碼就先執行了 原有的數據又賦給了控制項 那麼執行按鈕事件的時候 實際上獲得的是原有的數據 那麼更新當然就沒有效果了
更改這個問題也非常簡單 比較合理的做法是把數據綁定的代碼寫成一個方法 我們假設為BindData
private void BindData()
{ //綁定數據}
然後修改PageLoad
private void Page_Load( object sender EventArgs e )
{ if( !IsPostBack )
{ BindData() //在頁面第一次訪問的時候綁定數據}
最後在按鈕事件中
private Button _Click( object sender EventArgs e )
{ //更新數據BindData() //重新綁定數據}
預呈現
最終請求的處理都會轉變為發回伺服器的響應 預呈現這個階段就是執行在最終呈現之前所作的狀態的更改 因為在呈現一個控制項之前 我們必須根據它的屬性來產生Html 比如Style屬性 這是最典型的例子 在預呈現之前 我們可以更改一個控制項的Style 當執行預呈現的時候 我們就可以把Style保存下來 作為呈現階段顯示Html的樣式信息
保存狀態
這個階段是針對載入狀態的 我們多次提到 請求之間是不同的實例在處理 所以我們需要把本次的頁面和控制項的狀態保存起來 這個階段就是把狀態寫入ViewState的階段
呈現
到這里 實際上頁面對請求的處理基本就告一段落了 在Render方法中 會遞歸整個頁面的控制項樹 依次調用Render方法 把對應的Html代碼寫入最終響應的流中
處置
實際上就是Dispose方法 在這個階段會釋放佔用的資源 例如資料庫連接
卸載
最後 頁面會執行OnUnLoad方法觸發UnLoad事件 處理在頁面對象被銷毀之前的最後處理 實際上ASP Net提供這個事件只是設計上的考慮 通常資源的釋放都會在Dispose方法中完成 所以這個方法也變成雞肋了
我們簡單的介紹了頁面的生存周期 對於伺服器端事件的處理做了不太深入的講解 今天主要是想大家了解頁面執行的周期 對於伺服器控制項的事件和生存期我會在後續在寫一些文章來探討
lishixin/Article/program/net/201311/13003
『叄』 ASPNET MVC5+EF6連接Oracle資料庫有哪些方式
一OracleClient方式,是微軟專門針對Oracle資料庫開發的
引用類庫:System.Data.OracleClient.dll命名空間:System.Data.OracleClient
常用類:OracleConnection、版OracleCommand、OracleDataAdapter、OracleTransaction、OracleDataReader等
連接字元串:「權data source=**;user id=**;password=**」(注意:可以不指定 provider 驅動)
二OleDb方式
引用類庫:System.Data.dll命名空間:System.Data.OleDb
常用類:OleDbConnection、OleDbCommand、OleDbDataAdapter、OleDbTransaction、OleDbDataReader等。
連接字元串:與OracleClient方式相比,要添加一個provider,「provider=MSDAORA.1;」
下面是示例,分別用這兩種方式實現了相同的功能:連接資料庫,並將查詢到的數據放到dataSet中。
『肆』 用aspnet
在 模型中 vs 已經完全脫離了編譯而成為了一個徹底的ide 算是一個不小的改動 其中更是取消了有關Web Application的概念 使得習慣了vs 的人剛開始的時候會有一些摸不著頭腦 下面簡單說一下我在使用過程中自己總結的 算是一點經驗
新建web工程並且位置是文件系統的時候 vs 只是幫你建好了一個sln文件 這個東西只是指引m *** uild 如何進行編譯的 過程是 ide 調用 m *** uild m *** uild解析sln文件 m *** uild調用aspnet_piler exe進行網站的編譯 所以aspnet_piler exe只是負責進行網站的編譯的
預編譯的概念在framework 裡面就存在了 vs 中的預編譯指的是將頁面對應的cs/vb文件與resx文件編譯後統一集成到一個dll中放到bin目錄下 將aspx文件直接拷貝過去 這樣做會留下隱患 因為aspx文件就直接暴露在最後的發行包中 如果完全是codeb behind模型還好 只能改改界面 如果採用了頁面上的來生成頁面 源代碼就暴露了 針對這些問題 vs 採用了一種新的模式
請參看ASP NET 編譯工具 (Aspnet_piler exe) 這篇文章了解對各種文件的處理方式
IDE發布
vs 中選擇 生成 〉發布網站 在對話框中的操作將映射到aspnet_piler exe的參數中 可更新的發布對應 u 其他選項類似 請參考上面的文章了解
注意 發布時將忽略nfig中的debug?問騁簧晌薜魘孕畔⒌奈募?
手工編譯
簡單說來 如果是無更新發布模式編譯 appcode下面的class編譯成dll放在bin下 頁面內容清空位置不變作佔位用 同時頁面被編譯成一個隨機名稱的dll 增加一個同piled文件到bin目錄下 內容大概如下
<?xml version= encoding= utf ?>
<preserve resultType= virtualPath= /Forum/AdminList aspx hash= c filehash= f d c flags= assembly= App_Web_hmrycg w type= ASP forum_adminlist_aspx >
<filedeps>
<filedep name= /Controls/footer ascx />
<filedep name= /Controls/header ascx />
<filedep name= /Forum/AdminList aspx />
<filedep name= /Forum/AdminList aspx cs />
<filedep name= /Forum/menu ascx />
<filedep name= /Forum/menu ascx cs />
</filedeps>
</preserve>
裡面只是列出了頁面上的customcontrol 這里已經完成了和masterfile的映射 這樣最大限度的保護了頁面的敏感信息 發布過的網站中只能看見一堆文件名了 可更新的發布模式與vs 類似 頁面就直接拷貝過來不予編譯了
講了一堆原理 下面說一下aspnet_piler exe的調用方法 這是我使用的例子
我的開發目錄是這樣的
Project/
library/
devroot/
pubroot/
proj sln
使用的命令如下
aspnet_piler v / p devroot f pubroot
分析
v / 指明了iis的虛擬目錄
p devroot 表示代碼實際位置
pubroot 指明了要發布的位置
f 表示強制改寫目標位置
lishixin/Article/program/net/201311/13677
『伍』 求助extAspNet 下後台調用腳本方法
Ext.NET開發小結
頁面頭部一定要引入:
<%@Register Assembly="Ext.Net" Namespace="Ext.Net" TagPrefix="ext" %>
Body部分一定要添加<ext:ResourceManager ID="ResourceManagerID「 runat=」server」 />
不然無法解析頁面
一、 彈窗對話框
(1) 前台彈出對話框 Ext.Msg.alert("提示標題", "提示內容");
(2) Ext.Msg.confirm("提示", "確定要XXXX嗎?", function(result) {
if (result == "yes") {
//單擊是按鈕觸發事件
} else {
//單擊否按鈕觸發事件
}
});
(3) 後台彈出一般對話框
X.Msg.Alert("提示", "請返回選擇要綁定的用戶").Show();
//帶有回調函數的提示,SetWindowOpen方法是客戶端的js函數,程序會自動執行它,這個提示框不一定會顯示出來,但是處理方式上很靈活,因為客戶端的函數還可以寫成再次回傳到後台,自己把握
X.Msg.Alert("提示", "內容", new JFunction { Fn = "SetWindowOpen()" }).Show();
(4) 後台的確認提示及回調函數處理
(5) X.Msg.Confirm("提示", "內容?", new MessageBoxButtonsConfig
{
Yes = new MessageBoxButtonConfig
{
Handler = "mainpage.CreateModel()",
Text = "是"
},
No = new MessageBoxButtonConfig
{
//Handler = "xxx 方法",
Text = "否"
}
}).Show();
這是後台的一個彈出確認框提示,針對每個按鈕都可以在Handler上配置事件,
主要,它的裡面是個方法,這個方法可以帶類名,比如
public partial class mainpage
{
[DirectMethod]
public void CreateModel()
{
//…..
}
}
但一定要主要,因為需要回調後台方法,所有該方法必須有DirectMethod進行標記,不然不識別。
『陸』 aspnet後台怎麼控制可以讓一個層多次顯示出來
彈出層是JS做的事。跟ASP.NET沒有一毛錢關系。
用JS寫個彈層,彈層又沒限制人彈多少次。
自己不會寫的話,就下載一個tinybox.
直接調用。很方便。
『柒』 asp.net mvc是什麼
三層架構中,DAL(數據訪問層)、BLL(業務邏輯層)、UI(顯示)層各司其職,意在職責分離。
MVC是 Model-View-Controller,嚴格說這三個加起來以後才是三層架構中的顯示層,也就是說,MVC把三層架構中的UI層再度進行了分化,分成了控制器、視圖、實體三個部分,控制器完成頁面邏輯,通過實體來與界面層完成通話;而C層直接與三層中的BLL進行對話。
…………………………………………………………
如果對aspnet感興趣,看看一個大專生怎麼自學aspnet到找到工作。
先做個自我介紹,我07年考上一所很爛專科民辦的學校,學的是生物專業,具體的學校名稱我就不說 出來獻丑了。09年我就輟學了,我在那樣的學校,一年學費要1萬多,但是根本沒有人學習,我實在看不 到希望,我就退學了。
退學後我也迷茫,大專都沒有畢業,我真的不知道我能幹什麼,我在糾結著我能做什麼。所以輟學後 我一段時間,我想去找工作,因為我比較沉默寡言,不是很會說話,我不適合去應聘做業務。我想應聘 做技術的,可是處處碰壁。
一次偶然的機會,我才聽到aspnet這個行業。那天我去新華書店,在計算機分類那邊想找本書學習 。後來有個女孩子走過來,問我是不是讀計算機的,有沒有興趣學習aspnet,然後給我介紹了一下 aspnet現在的火熱情況,告訴我學aspnet多麼的有前景,給我了一份傳單,aspnet培訓的廣告。聽了 她的介紹,我心裡癢癢的,確實我很想去學會一門自己的技術,靠自己的雙手吃飯。
回家後,我就上網查了下aspnet,確實是當今比較熱門的行業,也是比較好找工作的,工資也是相 對比較高。我就下決心想學aspnet了。於是我去找aspnet培訓的相關信息,說真的,我也很迷茫,我 不知道培訓是否真的能像他們宣傳的那樣好,所以我就想了解一段時間再做打算。
後來,我在網路知道看到一篇讓我很鼓舞的文章是一個aspnet高手介紹沒有基礎的朋友怎麼自學入 門學aspnet,文章寫的很好,包含了如何學習,該怎麼學習。他提到一個方法就是看視頻,因為看書實 在太枯燥和費解的,很多我們也看不懂。這點我真的很認同,我自己看書往往看不了幾頁。
我在想,為什麼別人都能自學成才,我也可以的!我要相信自己,所以我就想自學,如果實在學不會 我再去培訓。
主意一定,我就去搜索aspnet的視頻,雖然零星找到一些aspnet的視頻,但是都不系統,我是想找 一個能夠告訴我該怎麼學的視頻,一套從入門到精通的視頻,一個比較完整的資料,最好能有老師教, 不懂可以請教的。
後來我又找到一份很好的視頻,是在IT學習聯盟推出的一份視頻《零基礎aspnet就業班》(喜歡《 零基礎aspnet就業班》的可以復制 sina.lt/bsjr 粘貼瀏覽器地址欄按回車鍵即打開)
下面介紹下我的學習流程,希望對和我一樣完全沒有基礎的朋友有所幫助。
收到他們寄過來的光碟後,我就開始學習了,由於我沒有什麼基礎,我就從最簡單的C#語言視頻教程 學起,話說簡單,其實我還是很多不懂的,只要重復多看幾遍,就能看懂。C#語言我差不多學了一個禮 拜,接下來我就學了winform,SQL Server,html/css/javaScript,差不多也就三個禮拜。我每天都在不 停的寫一些簡單的代碼,這樣一月後我基本掌握了aspnet的全部基礎。
接下來開始學習aspnet高級課程,老師幽默風趣而又輕松的課堂教課,使我發現原來學習aspnet並 不是一件很難的事情。之前我把aspnet基礎學得還不錯,到了到了aspnet高級部分,我覺不又不是很 難,可能老師太牛了,他能把復雜的問題講的比較通俗易懂,有些難點的地方我還是連續看了五六次, 把他弄懂。每天下午6點下班後,吃了飯,馬上跑回家。看視頻,買了幾本筆記本。當時,為了編程還花幾百元了台二手的台式電腦,配置一般,但編程是足夠的。一邊看視頻,一邊記筆記,把重點都記下來,還一邊跟著老師敲代碼,為了能盡早學會aspnet。每天都堅持學5-6個小時。經常學到晚上一點多才睡覺。星期六,日不用上班,每天7點多起床,學到晚上11,12點。那段時間特別辛苦,特別累。在學習aspnet的三個多月里,除了吃飯睡覺工作,剩餘的時間都在學習,因為我知道自己的計算機基礎不是很好,也沒有學過什麼計算機,相對於那些科班的人來說我要比他們付出更多的努力。我只能咬緊牙關,堅持下去,我不能放棄,我要完成我的夢想,我要讓我的家人過上好日子。終於三個多月後我把aspnet教程里的內容和項目都學完了,在學項目的過程中我發現項目特別重要,他能把你學過的知識全部聯系起來,能更好的理解你所學的知識。還有學習過程中,動手很重要,要經常跟著老師動手敲,動手吧,跟著做,一行一行的跟著敲,再試著加一些自己的功能,按照自己的思路敲一些代碼,收獲遠比干聽大的多。 如果遇到暫時對於一些思路不能理解的,動手寫,先寫代碼,慢慢你就會懂了。
於是我就到51job瘋狂的投簡歷,因為我學歷的問題,專科沒有畢業,說真的,大公司沒有人會要我,所以我投的都是民營的小公司,我希望自己的努力有所回報。沒有想過幾天過後,就有面試了,但是第一次面試我失敗了,雖然我自認為筆試很好,因為我之前做了准備,但是他們的要求比較嚴格,需要有一年的項目經驗,所以我沒有被選中。
後來陸續面試了幾家公司,終於功夫不負有心人。我終於面試上的,是在閔行的一家民營的企業,公司規模比較小,我的職務是aspnet開發程序員,但我也比較滿足,開的工資是3500一個月,雖然我知道在上海3500隻能過溫飽的生活,但是我想我足夠了。我至少不用每天都要靠父母養,我自己也能養活自己的。我想只要我繼續努力,我工資一定會翻倍的。
把本文寫出來,希望能讓和我一樣的沒有基礎的朋友有信心,其實我們沒有必要自卑,我們不比別人笨,只要我們肯努力,我們一樣會成功。
…………………………………………………………