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);
        }
    }
}

我还建议您在 Google 上搜索 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

使您的目录方法publicstatic。然后你可以这样称呼它

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

如果您不能更改签名......您可以创建一个公共包装方法并以相同的方式调用它。如果你不能使方法静态,那么你应该首先创建你的类的一个实例,最后调用新的公共包装方法。

于 2013-04-26T07:01:01.290 回答