0

この関数 (およびその他の関数) を作成して、「/Helpers/UploadFiles.cs」の下にあるプロジェクトの別のクラス ファイルに配置しようとしました。

namespace Artikelhantering.Helpers
{
public class UploadFiles
{

    private void EnsureDirectoriesExist(string SKU)
    {

        // if the directory doesn't exist - create it. 
        if (!System.IO.Directory.Exists("//servername/wwwroot/prodimg/" + SKU))
        {
            System.IO.Directory.CreateDirectory("//servername/wwwroot/prodimg/" + SKU);
        }

    }
}

次に、コントローラーでArtikelhantering.Helpers; を使用して追加しました。、web.config ファイルの名前空間セクションと global.asa.cx にも追加されます。

次に、このようにコントローラーの ActionResult から呼び出すことができると考えました

[ChildActionOnly]
public ActionResult _EnumerateFolder(string SKU)
        {
            // create directory if it does not exist
            EnsureDirectoriesExist(SKU);

            ViewBag.SKU = SKU;
            var folder = Directory.EnumerateFiles("//servername/wwwroot/prodimg/" + SKU);
            return View(folder);
        }

しかし、私が得るのは次のとおりです。

エラー 2 'EnsureDirectoriesExist' という名前は現在のコンテキストに存在しません

UploadFiles.EnsureDirectoriesExist(); と書いて呼び出してみました。しかし、それもうまくいきません。これらのメソッドをすべて同じファイルに入れずに呼び出すにはどうすればよいですか? これをもっとうまく整理したい。

4

5 に答える 5

5

メソッドは非公開です。他のクラスのプライベート メンバーにはアクセスできません。

ここにもいくつかの問題があります:

  1. 作成したメソッドはインスタンス メソッドであるため、メソッドを呼び出すクラスのインスタンスが必要です。
  2. を使って呼び出したい場合はUploadFiles.EnsureDirectoryExists()、クラスメソッドにする必要があります ( static)。
  3. あなたがしようとしている方法で新しいディレクトリを作成できるかどうかはわかりません。このコードが実行されているのと同じマシン上にディレクトリを作成しようとしている場合は、ローカル ファイル名を使用してください。

1) のサンプルコード:

UploadFiles uf = new UploadFiles();
uf.EnsureDirectoryExists();

2) のサンプル コード:

public class UploadFiles
{
    public static void EnsureDirectoriesExist(string SKU)
    {
        // if the directory doesn't exist - create it. 
        if (!System.IO.Directory.Exists("//servername/wwwroot/prodimg/" + SKU))
        {
            System.IO.Directory.CreateDirectory("//servername/wwwroot/prodimg/" + SKU);
        }
    }
}

さらに、クラスとは何か、どのように使用できるかについての情報を提供する C# チュートリアルをグーグルで検索することをお勧めします。

于 2013-04-26T06:56:50.247 に答える
1

まず、アクセス修飾子EnsureDirectoriesExistを public に変更してからActionResult _EnumerateFolder、以下のコードでメソッドを変更してみてください。

public ActionResult _EnumerateFolder(string SKU)
{
    // create directory if it does not exist
    new UploadFiles.EnsureDirectoriesExist(SKU);

    ViewBag.SKU = SKU;
    var folder = Directory.EnumerateFiles("//servername/wwwroot/prodimg/" + SKU);
    return View(folder);
}
于 2013-04-26T06:58:14.310 に答える
1
  1. ここで最初に正しくないのは、メソッドのアクセシビリティ レベルです。クラス本体の外部からメソッドを呼び出すには、それをpublicにする必要があります。
  2. また、このメソッドを呼び出す方法も正しくありません。望ましい方法でそれを行うには、メソッドを呼び出すクラスのインスタンスを作成しないように、クラスを静的にする必要があります。

そう:

public static class Helper 
{
      public static void EnsureDirectoriesExist(string SKU)
      {
           ...
      }
}
于 2013-04-26T07:01:05.707 に答える
0

クラスを静的としてマークしてから、これを試してください:

public static class UploadFiles
{

    public void EnsureDirectoriesExist(string SKU)
    {
        //your code
    }
}

それで:

public ActionResult _EnumerateFolder(string SKU)
{
        UploadFiles.EnsureDirectoriesExist(SKU);

        //your code
}
于 2013-04-26T06:57:24.583 に答える
0

ディレクトリ メソッドをpublicおよびstaticにします。次に、次のように呼び出すことができます

Artikelhantering.Helpers::UploadFiles.EnsureDirectoriesExist(SKU);

署名を変更できない場合... public ラッパー メソッドを作成し、同じ方法で呼び出すことができます。メソッドを静的にできない場合は、最初にクラスのインスタンスを作成し、最後に新しいパブリック ラッパー メソッドを呼び出す必要があります。

于 2013-04-26T07:01:01.290 に答える