1

1 つのマスター ページと複数の子ページで構成されるカスタム C#/ASP.NET Web サイトを既に持っています。そして、子ページは相互に関連しています。Web サイトにはいくつかのカスタム ユーティリティ クラスもあり、子ページからこれらのクラスを呼び出しています。また、Web サイトは SQL データベースにも接続されており、コードからデータ処理用のカスタム クラス ライブラリをいくつか呼び出しています。

次に、このカスタム Web サイトを DotNetNuke Web サイトに統合する必要があります。バージョン 7.0.1 の DotNetNuke Web サイトを既にホストしています。

ホストされている DotNetNuke Web サイトに Web サイトを統合するにはどうすればよいですか?

私は2つの解決策を見つけまし
た.1つ目はDNN Iframeモジュールを使用することですが、オプションを使用できません. 2番目のオプションは、個々のWebページをユーザーコントロールとして変換し、DNNモジュールとして追加することですが、私の場合、Webサイトにはマスターページ、相互に関連する子ページ、ユーティリティクラスがあります. そのため、DNN モジュールを作成するために、すべてのページをユーザー コントロールとして変換するのは非常に大きな作業になります。

ホストされている DNN Web サイトに私の Web ページを統合するためのより良い方法を誰か提案できますか?

4

1 に答える 1

0

私たちがしたことは、2つのWebサイトを維持することでした. マスターページと DNN スキンの同じスタイリングにより、エンドユーザーには 1 つの Web サイトのように見えます。DNN から Asp.NET Web サイトへのリンクを使用します。カスタム roleprovider を使用して、同じ承認を使用できます

public class DNNRoleProvider : System.Web.Security.RoleProvider
{
    public override string[] GetRolesForUser(string username)
    {
        List<string> roles = new List<string>();
        using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DNNDB"].ConnectionString))
        {
            con.Open();
            string sql = "SELECT r.RoleName FROM dbo.UserRoles ur INNER JOIN dbo.Roles r on ur.RoleID = r.RoleID INNER JOIN dbo.Users u ON u.UserID = ur.UserID WHERE u.Username = @username";
            SqlCommand cmd = new SqlCommand(sql, con);
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.Add(new SqlParameter("username", username));
            SqlDataReader reader = cmd.ExecuteReader();
            using (reader)
            {
                while (reader.Read())
                {
                    roles.Add(reader["RoleName"].ToString());
                }
            }

            return roles.ToArray();
        }
    }

    public override bool IsUserInRole(string username, string roleName)
    {
        bool ret = false;

        using (SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["DNNDB"].ConnectionString))
        {
            con.Open();
            string sql = "SELECT count(0) FROM dbo.UserRoles ur INNER JOIN dbo.Roles r on ur.RoleID = r.RoleID INNER JOIN dbo.Users u ON u.UserID = ur.UserID WHERE u.Username = @username and r.RoleName = @rolename";
            SqlCommand cmd = new SqlCommand(sql, con);
            cmd.CommandType = CommandType.Text;
            cmd.Parameters.Add(new SqlParameter("username", username));
            cmd.Parameters.Add(new SqlParameter("rolename", roleName));
            SqlDataReader reader = cmd.ExecuteReader();
            using (reader)
            {
                if (reader.Read())
                {
                    ret = reader[0].ToString() == "0" ? false : true;
                }
            }
        }

        return ret;
    }

    //rest of interface implementation

}
于 2013-09-26T09:52:16.697 に答える