回 帖 发 新 帖 刷新版面

主题:ASP.NET初学都的疑惑,请各位解答!!!

看了几天的书,感觉ASP.NET的功能非常强大,而且操作简单.于是安装了VS.NET,准备边看书边跟着做,但是自己动手就出了许多问题.

1.代码分离:一个窗本有aspx文件和aspx.cs文件,但下载源码看,却只有aspx文件.是不是编译好以后,aspx.cs文件就可以不用了?还是得像VB中那样生成一个EXE文件,而生成一个aspx文件?

2.aspx和aspx.cs是通过什么关联的?是自动的吗?我在做一个按钮的单击事件中,直接在aspx中写入代码可以运行(这样的话就跟ASP没有分别了),但在aspx.cs中写入代码运行后没有反应,为什么?

3.Web.config的配置问题,这个配置在怎么项目中起什么作用?是关于系统的配置还是根据项目来配置?

4.是不是每个与数据库关联的页面都要设置数据库连接(看别人的代码中每页都有连接字符串,而ASP中可以通过一个调用一个数据库连接文件,这里是不是一样可以呢?)

操作中的小问题
数据库连接:在学习通过OleDbConnection控件连接ACCESS中,设置它的ConnectionString属性时,选择"新建连接...'没有任何反应,是什么问题?书上说应该出现一个数据库连接对话框呀!

回复列表 (共11个回复)

沙发

1。ASP.NET是控件代码和程序代码是分离的,没有错,但是也可以把两个代码都写在ASPX中。
2。是自动关联了,当然和ASP有区别了,vs.net最大的改变就是VB。ASP。WEB SERVICE了。可以写在一起,也许是考虑兼容问题吧。
3。WEB.CONFIG是建立的本项目配制文件。 MACHINE.CONFIG是本系统配制。
4。不是每个与数据相关的页面都要设置连接,是要看,用到数据库要打开,用完关闭的原则。
最后一个问题,高手一般写代码的。方便些。

板凳

是不是编译好以后,aspx.cs文件就可以不用了,可以删除吗?

我看别人的代码都没有aspx.cs,删除了里面的代码怎么办

3 楼

大家都习惯于在aspx中写代码还是用vs.net在aspx.cs中写代码呀?
用习惯了asp,感觉在aspx.cs中写代码太受控件的约束了,比如本来可以随便在aspx中做一个table的循环,然后到数据库里取数据显示,要是用aspx.cs后就一定要用repeater或datagrid了,而且那个dataset还挺不容易理解,两表一连接我就蒙了,哈哈!

4 楼

可以这样理解的,我们在编写asp的代码的时候,有时候想用一个组件而asp中没有,那么我们会习惯于用vb写一个activx dll然后编译生成一个dll文件,而在我的asp中我就可以引用这个dll文件
set obj=Server.CreateObject("testdllsuc.TestDll")
括号里的就是你的组件名.类名
那么我们到了c#里面,C#就是将大部分的代码转移到了.cs文件里面,这就是所谓的代码和窗体分离,我们在编译好了之后,你看一下窗体.aspx文件里面有一句
Inherits="WebApplication1.WebForm1"
他的作用跟上面的asp中的语句作用是一样的,就是引用编译后的dll文件,所以你编译之后只要上传aspx和dll文件就可以运行,当然要包括配置信息了.
asp.net中的窗体,代码分离实际上和asp+dll,Jsp+JavaBeans是一个道理.你也完全可以在窗体中写代码.但是你的源代码是开放的,如果分离后,你的代码就是隐藏的,可以保护你的知识产权,这样说明白吗?其实我也是刚学,还请高手指点.

5 楼

4楼的大哥说的让我明白多了!!多谢!多谢!

是不是每天CS文件都要编译生成一个单独DLL,还是就是放在bin文件夹中的跟项目名称一样的那个dll中?

6 楼

对于vs.net默认生成的就是一个dll文件,当然如果你有自己生成的类库或者是第三方提供的类库,也可以将他们放到bin下面,引用他们的方法同C#中windows程序引用类库一样.实际上对于一个工程,生成一个dll就够了,因为对于不同的引用是通过命名空间来区分的,而不是通过文件名来区分的.举个例子:

现在你有一个工程叫做test.sln,然后有两个WebForm1.aspx,WebForm2.aspx文件,对于每一个aspx文件都对应其后台代码WebForm1.aspx.cs和WebForm2.aspx.cs, 你将webForm1.aspx.cs里面的的namespace改为namespace test1,WebForm2.aspx.cs里面的namespace改为namespace test2,这样当编译后虽然只生成了一个test.dll,但是在
WebForm1.aspx里面语句为Inherits="test1.WebForm1"而WebForm2.aspx里面的引用语句为Inherits="test2.WebForm2",其中的格式就是Inherits="命名空间.类名".

所以实际上一个窗体文件到底引用哪个后台的.cs文件是通过namespace+class名称的不同来决定了,所以只要生成一个WebApplication1.dll就够了,以便你能够加载这个dll文件.至于你使用这几个cs文件中的哪一个是通过namespace的不同来区分的.

这是我的理解,你看看你能明白吗?

7 楼

谢谢namename,初步明白了一点了!这样说当然是编译成dll的即快又安全了,要是向我前面所说的vs.net本身没有组件,比如一个非常灵活的经过很多计算连接出来的数据组织的TABLE,那就是即可以写到一个类的方法里,这样编译成dll后可以在aspx中直接调用方法?或是直接像ASP一样代码标记不分离的写在aspx文件中是吗?
笨笨的问题,如果把这个东东写到了一个类中的一个方法里,在aspx中怎么直接调用dll中的这个方法呢??
另外,我用asp.net主要做一些连接oracle的数据展示,或是网站应用的,namename哥给推荐一本书吧!

8 楼

呵呵,我也是才学asp.net没有多久,我以前就学c/c++来着,大家一起努力了.呵呵~~~
那个方法调用最好不要在aspx中调用,如果你一定要在aspx中调用,就用下面的方法:
比如说:下面的类库
//工程名定为 testdll.sln,编译后生成testdll.dll
using System;
namespace testdll
{
    /// <summary>
    /// Class1 的摘要说明。
    /// </summary>
    public class testdllClass
    {
        public testdllClass()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
        }
        public int add(int x,int y)
        {
         return x+y;
        }
        public int sub(int x,int y)
        {
         return x-y;
        }
        public int mul(int x,int y)
        {
         return x*y;
        }
        public int div(int x,int y)
        {
         return x/y;
        }
    }
}
//将testdll.dll拷贝到工程的bin下面
在aspx中引用的方法就是在<body></body>中加入下列语句,就可以了
<%@ import namespace="testdll" %>
    <%
    testdllClass testdllclass=new testdllClass();
    int x=testdllclass.add(2,3);
    TextBox1.Text=x.ToString();
    %>
//如果在后台代码中引用和在windows程序中引用是一样的。
//看什么书我也没谱,还请过来人推荐几本。

9 楼

想问namename兄一下,在testdllClass的各个方法里不可以直接用Response.Write吗?用System.Console.Write输出也不行呀!

10 楼

你想在后台代码中使用Response等asp组件没有问题,方法如下
项目->添加引用,打开应用对话框后选择com,找到Microsoft Active Server Page
Object Libarary  2.0或3.0都可以,点右边的选择,然后确定,就将这个组件引入了
C#中,你就可以在后台代码中使用Response等组件了,
测试代码
添加Button,他的事件处理函数修改为:
private void Button1_Click(object sender, System.EventArgs e)
        {
         Response.Write("hello");
        }
运行就可以输出结果了,其他使用Response的方法跟asp中使用方法一样,(本来他们就是一个东西,都是应用了Microsoft的com组件.
另外,有问题,请重新开贴,这样发在下面,我未必能够看到.呵呵~~~~~~~

我来回复

您尚未登录,请登录后再回复。点此登录或注册