3

PHPからASP.NET/C#に移行しています。これまでのところ良いですが、ASP.NET C#クラスページ内でクラスをインスタンス化する方法がわかりません。

たとえば、login.aspxがあります。

<%@ Page Language="C#" Inherits="Portal.LoginService" src="LoginService.cs" %>

<!DOCTYPE html>
<body>
    <form runat="server" id="login" name="login">           
        <p>Username:</p><input type="text" id="username" name="username" runat="server" />  

        <p>Password:</p><input type="password" id="password" name="password" runat="server" />

        <input type="submit" name="submit" OnServerClick="Post_Form" runat="Server" /> 
    </form>
</body>

LoginService.cs:

using System;
using System.Web.UI;
using System.Web.UI.HtmlControls;
namespace Portal {
public class LoginService : Page {

    protected HtmlInputControl username, password;

    public void Post_Form(object sender, EventArgs e) {

        if (username.Value != "" && password.Value != "") {
            //LOGIC HERE

            //This doesn't work
            CustomSanitize a = new CustomSanitize();                              
        }
    }
}
}

CustomSanitize.cs:

using System;
namespace Portal {
    public class CustomSanitize {

        //instantiate here

        public string sanitizeUserPass() {
                return "logic here"
            }
    }
}

つまり、ASP.NET C#でセットアップしたクラスで、さまざまなクラスのメソッドを使用したいと思います。これまでのところ、名前空間は機能しませんでした。

ご入力ありがとうございます。

4

4 に答える 4

5

私があなたを正しく理解している場合はCustomSanitize、名前空間でラップします。

namespace MyProject {
    public class CustomSanitize {

        //instantiate here

        public string sanitizeUserPass() {
                return "logic here"
            }
    }
}

LoginService.cs次に、同じ名前空間でラップします。すなわち

namespace MyProject {
    public class LoginService : Page {

        protected HtmlInputControl username, password;

        public void Post_Form(object sender, EventArgs e) {

            if (username.Value != "" && password.Value != "") {
                //LOGIC HERE

                //This doesn't work
                //CustomSanitize a = new CustomSanitize();                              
            }
        }
    }
}

これで、にアクセスできるようになりますCustomSanitize a = new CustomSanitize();

さらに名前空間を作成して、プロジェクトを分割することもできます。つまりnamespace MyProject.Helper、すべてのヘルパー関数をラップしてから、クラスを使用するファイルusing MyProject.Helperの先頭に追加するだけです。.cs

編集:

usingプロジェクトに名前空間を追加するとき/名前空間でクラスをラップするときは、を介して、または直接のように、その名前空間を介してそれらを参照する必要があることに注意してくださいMyProject.LoginService。これはaspxascxページでも。を使用して実行する必要があります@ Page declaration

于 2012-12-20T15:28:09.273 に答える
2

上記のクラスがすべて同じプロジェクトにある場合は、名前空間を追加するだけです。次の例を確認してください:名前空間チュートリアル

同じプロジェクト内で異なる名前空間を使用する場合は、上部に独自の「using」行を追加します。

using System;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using Utilities.Sanitizers;

namespace Services {

public class LoginService : Page {

protected HtmlInputControl username, password;

public void Post_Form(object sender, EventArgs e) {

    if (username.Value != "" && password.Value != "") {
        //LOGIC HERE

        //This doesn't work
        //CustomSanitize a = new CustomSanitize();                              
    }
}
}
}

using System;
namespace Utilities.Sanitizers
{
public class CustomSanitize {

    //instantiate here

    public string sanitizeUserPass() {
            return "logic here"
        }
}
}
于 2012-12-20T15:32:08.193 に答える
1

あなたCustomSanitizeloginserviceクラスでは、プロジェクトの名前空間が欠落しています。

それに加えて、クラスのコンストラクターを作成することもできます。これは必須ではありませんが、クラスを別のファイルでインスタンス化するときにデフォルト設定を設定できます。(空のコンストラクターは、自分で設定しない場合にコンパイラーによって生成されます。したがって、このコード例のコンストラクターは冗長です。ただし、表示するだけです。)

これは、オーバーロードされたコンストラクターを作成する場合にも当てはまり、コンパイラーが正しいパラメーターを選択するように、さまざまなパラメーターをコンストラクターに渡すことができます。

あなたが直面している主な問題はおそらくプロジェクトに名前空間が含まれていないことです。ファイルが同じプロジェクトにある場合は、そのプロジェクト内のすべてのクラスに名前空間を追加する必要があります。したがって、それらは相互に参照できます。

そのような:

using System;

namespace yourNameSpace
{
    public class CustomSanitize 
    {

        public CustomSanitize()
        {
            //Set what you need to set in the constructor
        }
        //instantiate here

        public string sanitizeUserPass() {
            return "logic here"
        }
    }
}

デフォルトでは、Visual Studio内から新しいクラスを生成するときに、名前空間'を追加する必要があります。毎回空のコードファイルから始めない限り。

于 2012-12-20T15:37:24.377 に答える
0

誰も言及していないことの1つは、ユーザー認証のためにこのようなことをする必要がないということです。代わりに、すぐに使用できる.net認証と承認の使用を検討する必要があります。https://www.google.co.uk/search?q = .net + authentication&aq = 0&oq = .net + authen&aqs=chromeを参照してください。 1.57j0l3j62l2.2451&sugexp = chrome、mod = 19&sourceid = chrome&ie = UTF-8

しかし、他の誰もが言っていることは正しいです。使用ステートメントが欠落しているため、機能していません(Intelisenseは、実際には小さな下線ビットをクリックしてから、[使用リンクを追加]をクリックできるはずです)

あなたがしたもう一つのことは以下に追加されます:-

protected HtmlInputControl username, password;

これは、asp.netフォームページでは必要ありません。私はあなたが多くの手作業をしたと思います-.netはありがたいことにそれよりずっと簡単です。

これは、ページがどのように表示されるかを示しています。-

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Login.aspx.cs" Inherits="WebApplication2.Login" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label runat="server" AssociatedControlID="Username">Username:</asp:Label>     <asp:TextBox runat="server" ID="Username"></asp:TextBox>
        <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="Username" Display="Dynamic" Text="Username is required"></asp:RequiredFieldValidator>
        <br/>
        <asp:Label ID="Label1" runat="server" AssociatedControlID="Password">Password:</asp:Label> <asp:TextBox ID="Password" runat="server" TextMode="Password"></asp:TextBox>
    <asp:RequiredFieldValidator runat="server" ControlToValidate="Password" Display="Dynamic" Text="Password is required"></asp:RequiredFieldValidator>
        <br/>
        <asp:Button runat="server" Text="Login" ID="btnLogin" OnClick="btnLogin_Click" />
    </div>
    </form>
</body>
</html>

そして背後にあるコード:システムの使用;

namespace WebApplication2
{
    public partial class Login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        protected void btnLogin_Click(object sender, EventArgs e)
        {
            Page.Validate();
            if (Page.IsValid)
            {
                string username = Username.Text;
                string password = Password.Text;
                //Logic here
            }
        }

    }
}

これにより、すべての検証が自動的に処理されます。http://www.asp.net/web-forms:http://www.asp.net/web-formsを参照して、ここにあるビデオのいくつかを視聴することを強くお勧めしますが、MVCの使用を真剣に検討する必要があります。これは、MVCを使用する方法により適しているためです。開発する

于 2012-12-20T15:53:26.807 に答える