App_Code中的ASP.NET Partial Class中的类

时间:2016-01-28 17:34:11

标签: c# asp.net class conflict partial-classes

我创建了一个连接类,并与register.aspx一起使用没有任何问题。当我尝试将代码从register.aspx.cs移动到regpartial.cs然后我收到冲突错误:"连接conn = new connection();"

我想将代码register.aspx.cs移动到mypartial.cs。我认为会更好,但我不确定如何解决冲突问题。

Register.aspx.cs(最终)

using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;
using test.App_Code;


namespace test
{   
    public partial class register: System.Web.UI.Page
    {
        private void Page_Load(object sender, EventArgs e)
        {

        }

Connection.cs(最后尝试)

using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;

namespace test.App_Code
{
    public class connection
    {

        public SqlConnection connect()
        {
            SqlConnection conn= new SqlConnection("Data Source=******;Initial Catalog=****;Integrated Security=False;User Id=****;Password=*****;MultipleActiveResultSets=True");
            baglanti.Open();
            return (conn);
        }
}

regpartial.cs(最后尝试)

using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using System.Web.UI;
using System.Web.UI.WebControls;


namespace test.App_Code.partials
{
    connection conn = new connection();
    public partial class regpartial : register
    {

    }
}

1 个答案:

答案 0 :(得分:1)

通常,您的aspx.cs文件中不应包含太多代码。

您希望直接将您的视图/表示逻辑(使.aspx页面工作的东西)的逻辑与业务逻辑(排序,转换,验证)分开,最后您希望获得数据访问/资源访问被隔离。

我还建议在原始ADO.NET/SqlConnection上使用Dapper.NET

我将把一个非常基本的例子串联起来,告诉你如何分开它。这不能保证编译c#代码,但它会非常接近伪代码。

在registration.aspx.cs里面

private void btnRegister_Click(object sender, EventArgs e)
{
    var email = txtEmail.Text;
    var password = txtPassword.Text;

    var registration = new Registration { Email = email, Password = password }

    var bizService = new RegistrationService();

    var response = bizService.Register(registration);

    if(response.Success) Response.Redirect("~/registration/success");

    ltlError.Text = response.FailureMessage;

}

RegistrationService.cs

public class RegistrationService {

    public RegistrationResponse Register(Registration req)
    {
        var regDAL = new RegistrationAccess();

        var isEmailDuplicated = regDal.DoesEmailExist(req.Email)

        if(isEmailDuplicated) 
              return new RegistrationResponse { 
                    Success = false,
                    FailureMessage = "Email exists, did you mean to login instead? 
                }

        regDAL.InsertNewRegistration(req)

        return new RegistrationResponse { Success = true };   
    }
}

最后,你应该有一个RegistrationAccess.cs,它只包含用于读写SQL Server /其他数据库/文件系统的代码。

注意aspx.cs文件如何不了解RegistrationAccess。您的视图不应该直接调用数据库。另外需要注意的是RegistrationService不了解视图。它接收注册类型,然后执行业务逻辑并调用DAL。 DAL类对视图和RegistrationService都没有任何了解,它只知道一件事,即数据库。

这是一个非常简单的ASP.NET webforms解决方案的基础。一个更好的解决方案是使用MVP / MVVM模式和依赖倒置原则,但如果你不理解基本的关注点分离,那么这些原则并不值得使用。