0

Microsoft Visual Web Developer と C# ベースの ASP.Net を使用して、学校のプロジェクトとして Web サイトを開発しています。

データベースで形成されるユーザーを表す単純なクラスを実装しました。このクラスには、データベース内の列を表すメンバーと、DataTable の結果からインスタンスを作成するためのいくつかの静的メソッドがあります。次のコードが使用されます (MyDbase は、提供されたヘルプ クラスです)。

//User.cs, placed in A
using System;

public class User
{
    private int id;
    private String email;
    private String firstName;
    private String lastName;
    private String username;
    private String passwd;
    private String birthDate;
    private bool isMale;
    private String phone;
    private String avatarUrl;
    private bool isAdmin;

    ... //Accessors and mutators

    public User( int _id, String _email, String _firstName, String _lastName, String _username, String _passwd,
                String _birthDate, bool _isMale, String _phone, String _avatarUrl, bool _isAdmin )
    {
        this.id = _id;
        this.email = _email;
        this.firstName = _firstName;
        this.lastName = _lastName;
        this.username = _username;
        this.passwd = _passwd;
        this.birthDate = _birthDate;
        this.isMale = _isMale;
        this.phone = _phone;
        this.avatarUrl = _avatarUrl;
        this.isAdmin = _isAdmin;
    }

    public static User getUserForSqlResult(System.Data.DataTable result)
    {
        User newUser = null;
        if (result.Rows.Count == 1)
        {
            newUser = new User((int)result.Rows[0]["id"], (String)result.Rows[0]["email"], 
                                (String)result.Rows[0]["firstName"], (String)result.Rows[0]["lastName"], (String)result.Rows[0]["username"],
                                (String)result.Rows[0]["passwd"], (String)result.Rows[0]["birthDate"], (bool)result.Rows[0]["isMale"],
                                (String)result.Rows[0]["phone"], (String)result.Rows[0]["avatarUrl"], (bool)result.Rows[0]["isAdmin"]);
        }

        return newUser;
    }

    public static User getUserById(int id)
    {
        System.Data.DataTable dt = MyDbase.SelectFromTable("select * from tUsers where id=" + id, "db.mdb");
        return getUserForSqlResult(dt);
    }

    public void saveUserChanges()
    {
        MyDbase.ChangeTable("UPDATE tUsers SET email='" + this.email + "', firstName='" + this.firstName + "', lastName='" + this.lastName +
                            "', passwd='" + this.passwd + "', birthDate='" + this.birthDate + "', phone='" + this.phone + "', avatarUrl='" +
                            this.avatarUrl + "' WHERE id=" + this.id , "db.mdb");
    }
}

select&update 関数が機能していることを確認するためだけに、次のサンプル コードを実行しようとしました (Default.aspx)。

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

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

        User user = User.getUserById(3);
        user.setEmail("different@email.com");
        user.saveUserChanges();
    }
}

ただし、次のエラーが表示されます。

エラー 1 'System.Security.Principal.IPrincipal' には 'getUserById' の定義が含まれておらず、タイプ 'System.Security.Principal.IPrincipal' の最初の引数を受け入れる拡張メソッド 'getUserById' が見つかりませんでした (ディレクティブまたはアセンブリ参照を使用していますか?)

なぜこれが起こるのでしょうか?Tnx!

4

3 に答える 3

4

問題はPage、と呼ばれるプロパティがあることUserです。評価することになると、それはあなたのクラスUser.getUserById()の代わりにそれを推測しています。User代わりにフルタイプの名前空間を使用してください。

protected void Page_Load(object sender, EventArgs e)
{

    My.Namespace.User user = My.Namespace.User.getUserById(3);
    user.setEmail("different@email.com");
    user.saveUserChanges();
}

クラスに名前空間がない場合は、名前空間を追加します。ただし、ほとんどのプロジェクトはデフォルトの名前空間をサポートしています。プロジェクトのプロパティを見ると、これが何であるかを知ることができます。

于 2013-01-16T18:56:19.720 に答える
0

User クラスとページのUserプロパティを混同しています。

于 2013-01-16T18:57:31.527 に答える
0

User クラスに名前空間を追加して、Page.User プロパティと User クラスの間のあいまいさを解消します。

using System;

namespace MyUser
{
    public class User
    {
       ....
    }
}

次にPage_Loadで

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


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

        MyUser.User user = MyUser.User.getUserById(3);
        user.setEmail("different@email.com");
        user.saveUserChanges();
    }
}
于 2013-01-16T19:01:07.613 に答える