对于新问题我很抱歉,但我是一位经验丰富的老式程序员,但我是很多.NET方式的新手,并希望做得对。请原谅任何不好的术语或要求澄清我屠杀它太多了。
我有一个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的基础知识非常高 - 我是一个老屁,并没有对这些新奇的装置有所了解。 :)谢谢!
答案 0 :(得分: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。
答案 1 :(得分:1)
通常在ASP.Net中,您希望页面类能够驱动事物。它应该调用其他类中的方法并将结果设置为控件。这意味着不要返回布尔值,而是看看让你的ReadMSDB函数返回一个字符串。相反,该布尔值似乎是一个很好的候选者。
不仅如此,我还怀疑任何接受名为“SQLString”的参数的方法。这告诉我你的代码很可能有一个SQL注入漏洞,因为没有机制可以使用自己的查询参数。您可能想要重新考虑如何进行整个数据访问层。我知道这听起来像个大工作,但你现在的代码看起来有一个非常严重的问题。我自己和其他人在Stack Overflow上都有答案,并提供了更好的模式示例。
答案 2 :(得分:1)
这个答案对于你想要完成的事情来说可能太简单了,但你是否考虑过使用部分类而不是4个单独的类?部分类允许您将类似的函数分成不同的文件,但允许您访问表单上的控件。其他答案也提供了很好的信息,但与.NET的许多不同的东西一样,有多种方法可以完成你想要做的事情。
答案 3 :(得分:0)
除了之前的答案。
这是很好的,你试图保持关注点的分离,但你可能想要使用一种可用的模式更有意识地做到这一点。这可以帮助您了解ASP.NET体系结构并从头开始编写更清晰的代码。我不会接触ASP.NET MVC,你可以自己检查一下。
第一种方法是使用Model-View-Presenter模式。以下是如何使用它的简要说明:http://www.codeproject.com/KB/architecture/ModelViewPresenter.aspx
第二种方法是使用Microsoft的Web Client Software Factory。这是一种更复杂的方式,主要用于大型企业应用程序。