2010-06-23 40 views
0

對不起,我是一個有經驗的老學校程序員,但我是很多.NET方法的新手,並希望做到這一點。請原諒任何不好的術語,或要求澄清我屠宰它太多。ASP.Net newb - 從不同的類訪問控件

我有一個ASP.NET網站我使用Visual Basic作爲語言在Visual Web Developer 2008 Express中創建。它實際上是一個現有的ASP腳本的重寫,我試圖咀嚼我已經咬掉的東西。我創建了一個帶有文本框(txtOutput)的頁面,並且由於最終產品非常複雜,並且通常很好的做法是分離類似的函數,我在App_Code部分創建了4個獨立的類。

我的主頁是Sync.aspx,它有一個代碼文件Sync.aspx.vb。

我的一個代碼文件是SyncDatabases.vb,並在其中我已經創建

Public Class SyncDB 

那堂課我已經創造了一些程序,如

Public Function ReadMSDB(ByVal SQLString as string) as Boolean 

在這個程序中我想提出信息在我的文本框txtOutput主窗體(默認 - Form1)。

我的問題是,如果我嘗試:

Form1.txtOutput.Text = "Hello world" 

或只是

txtOutput.Text = "Hello world" 

這名 'Form1的'(或 '爲txtOutput')未聲明說。我確信我缺少一些簡單的東西,但不知道它是什麼。我認爲這是寫命令在包含頁面本身的文件(類?)之外的文件(類?)中的事實,但我不知道如何正確解決它。

任何幫助表示讚賞,但請不要假設.Net的基礎知識水平非常高 - 我是一個老式的放屁,不適合這些新開發的裝置。 :) 謝謝!

回答

1

這個答案對於你想要完成的任務可能太簡單了,但是你有沒有想過使用分部類而不是4個單獨的類?部分類將允許您將類似功能分隔到不同的文件中,但可以讓您訪問表單上的控件。其他的答案也提供了很好的信息,但是像.NET的許多不同的東西,有更多的方法可以完成你正在嘗試做的事情。

+0

我喜歡這個。這可能不是「官方」的最佳答案,但它會在短期內發揮作用,而我正在努力做出正確的決定。謝謝! – Deverill 2010-06-23 19:31:48

1

您是否試圖在ReadMSDB方法中引用txtOutput.Text?如果你是,你需要在把它作爲一個參考,如:

Public Function ReadMSDB(ByVal txtOutput As TextBox, ByVal SQLString as string) as Boolean 

而在網頁的代碼隱藏做到:

Dim o as new SyncDB 
o.ReadMSDB(txtOutput, "...") 

HTH。

+0

我想從ReadMSDB方法中的文本框中輸出消息,如txtOutput.Text =「成功讀取53條記錄」 如果我按照上面所示傳遞它,那麼我可以在ReadMSDB中執行該操作嗎? 我認爲我的問題是太多的線性思維,而不是面向對象。 謝謝! – Deverill 2010-06-23 18:12:03

+0

是的,你可以這樣做,因爲你傳遞了直接引用,雖然是的,但是ReadMSDB方法不是負責使用UI負責,而是爲了完成它的工作,並且UI響應它(可能從方法傳回一個狀態對象)。分離關注原則。 – 2010-06-24 00:25:30

1

一般在ASP.Net中,您希望頁面類驅動事物。它應該調用其他類中的方法並將結果設置爲控件。這意味着不是返回一個布爾值,而是讓你的ReadMSDB函數返回一個字符串。相反,該布爾看起來像是一個很好的候選人。

儘管如此,我還是深表懷疑任何接受名爲「SQLString」的參數的方法。這告訴我你的代碼中有很好的機會存在sql注入漏洞,因爲沒有任何機制可以使用propery查詢參數。您可能需要重新考慮如何完成整個數據訪問層。我知道這聽起來很重要,但是你現在的代碼看起來像是一個非常嚴重的問題。我自己和其他人已經通過堆棧溢出回答了更好的模式示例。

+0

因此,轉換舊的有些邊緣代碼的詛咒。整個結構需要改變,有時只需要重寫整個事情就更容易了。 感謝有關異常的評論,儘管......我仍然認爲線性,你是對的,這只是一個工作或沒有做的更好的例外。 SQLString註釋非常值得讚賞,但在這種情況下,它絕不是輸入值或基於任何輸入......它嚴格地說是一個變量,用於沿着「UPDATE x SET y」行構建SQL語句=「&myProduct.name。 非常感謝! – Deverill 2010-06-23 18:06:16

0

除了以前的答案。

這很好,你試圖保持關注的分離,但你可能想要更有意識地使用可用模式之一來做到這一點。這可以幫助您瞭解ASP.NET體系結構並從頭開始編寫更清晰的代碼。我不會碰到ASP.NET MVC,你可以自己檢查一下。

第一種方法是使用Model-View-Presenter模式。這裏是如何使用它的簡要說明:http://www.codeproject.com/KB/architecture/ModelViewPresenter.aspx

第二種方法是使用微軟的Web Client Software Factory。這是更復雜的方式,主要用於大型企業應用程序。

+0

謝謝Artem。我很欣賞指向正確的做事方式的指針。事實上,當談到這樣的事情時,我有點失落,你的鏈接將會有所幫助。 – Deverill 2010-06-23 18:14:07