C# 在同一页面的不同部分显示图像

C# 在同一页面的不同部分显示图像,c#,asp.net-mvc-4,azure,razor,C#,Asp.net Mvc 4,Azure,Razor,我有一个Azure Blob,它有一个包含多个子文件夹的容器。在上一个问题中,他们回答了我如何让其中一个子文件夹输出其内容而不输出其他子文件夹的问题。到目前为止还不错 现在的问题是: 我有几个部分,例如,DFD、用例、流程图等等。。如您将在屏幕截图中看到的,这些是分段的。我必须找到一种方法,如何在正确的部分下输出每个子文件夹 我正在使用PublicActionResult索引,它返回ViewblobList,很快就会显示代码。问题是它只显示一个子容器,我必须手动输入它 当从blob中获取图像时,

我有一个Azure Blob,它有一个包含多个子文件夹的容器。在上一个问题中,他们回答了我如何让其中一个子文件夹输出其内容而不输出其他子文件夹的问题。到目前为止还不错

现在的问题是:

我有几个部分,例如,DFD、用例、流程图等等。。如您将在屏幕截图中看到的,这些是分段的。我必须找到一种方法,如何在正确的部分下输出每个子文件夹

我正在使用PublicActionResult索引,它返回ViewblobList,很快就会显示代码。问题是它只显示一个子容器,我必须手动输入它

当从blob中获取图像时,是否有一种方法可以在不同的部分显示不同的图像

我尝试编写一个方法,基本上根据指定的子文件夹从特定blob获取URL,但我不知道如何将字符串列表从控制器返回到视图

下面是我正在使用的一些截图和编码

[例如,在状态图中应该有前两幅图像,在活动图中应该有剩余的图像]

这是编码:

SystemDesign.cs//Model

公共课系统设计 { 公共字符串URL{get;set;}

public static SystemDesign returnImageURL(IListBlobItem item)
{

    if (item is CloudBlockBlob)
    {
        var blob = (CloudBlockBlob)item;
        return new SystemDesign { URL = blob.Uri.ToString() };

    }
    return null;
}
}

SystemDesignModel.cs

这是我尝试发明的方法,目的是返回字符串URI列表,但不知道如何将其从控制器传递到视图。在这种方法中,我想在Index.cshtml中传递容器名称,然后根据参数,在所述子文件夹中输出这些图像

public List<string> showBlobs(string blobContainerName)
{
    StorageCredentials credentials = new StorageCredentials("swiftdevelopmentstorage", "HqaCkZjdQ8w/DX/fS3wDxU6HXbeqV5EZ1b+UQaKALxaJDrN9JoZZYn8Q0KT6QR4tCrdGQicxE+tKRKScjINW8w==");
    CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);

    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    CloudBlobContainer storageContainer = blobClient.GetContainerReference("systemdesign");

    List<string> list = new List<string>();
    Models.SystemDesignModel blobsListDFD = new Models.SystemDesignModel(storageContainer.ListBlobs("dfd", useFlatBlobListing: true));
    foreach (var item in blobsListDFD.Files)
    {
        list.Add(item.URL.ToString());
    }


    return list;

}

有什么我可以改变的吗?

好的,这很尴尬,但我要回答我自己的问题,因为我知道如何解决它

我所做的是实现了一个_PartialView,它连接到showBlobsstring containerName方法。在Index.cshtml中找到的代码是@foreach,它被重新定位到部分视图中,这样由于传递了参数,它只显示来自所需容器的图像

下面我张贴所有重新编写的代码,使其工作。希望对某人有所帮助

SystemDesignController.cs//已更改索引和_showBlobs

public ActionResult Index()
{
    return View();
}
// Other code

[ChildActionOnly]
public PartialViewResult _showBlobs(string containerName)
{
    StorageCredentials credentials = new StorageCredentials(name, key);
    CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);

    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    CloudBlobContainer storageContainer = blobClient.GetContainerReference(rootContainer);


    Models.SystemDesignModel blobsList = new Models.SystemDesignModel(storageContainer.ListBlobs(containerName, useFlatBlobListing: true));

    return PartialView(blobsList);

}
_showBlobs.cshtml//局部视图

@{
        foreach (var item in Model.Files)
        {
            <a href="@item.URL"><img src="@item.URL" height="128" width="128" /></a>

        }

}
SystemDesignModel.cs//模型和实例

 public partial class SystemDesign
    {
        public string URL { get; set; }


        public SystemDesign() { }

        public SystemDesign (string url, string directory)
        {
            this.URL = url;

        }

        public static SystemDesign returnImageURL(IListBlobItem item)
        {

            if (item is CloudBlockBlob)
            {
                var blob = (CloudBlockBlob)item;
                return new SystemDesign 
                {   URL = blob.Uri.ToString(),

                };

            }
            return null;
        }

    }   


    // System Design Model 
    public partial class SystemDesignModel
    {
        public SystemDesignModel() : this(null)
        {
            Files = new List<SystemDesign>();
        }

        public SystemDesignModel(IEnumerable<IListBlobItem> list)
        {
            Files = new List<SystemDesign>();

            foreach (var item in list)
                {
                    SystemDesign test = SystemDesign.returnImageURL(item);
                    Files.Add(test);

                }


        }
        public List<SystemDesign> Files { get; set; }
    }
public ActionResult Index()
{
    return View();
}
// Other code

[ChildActionOnly]
public PartialViewResult _showBlobs(string containerName)
{
    StorageCredentials credentials = new StorageCredentials(name, key);
    CloudStorageAccount storageAccount = new CloudStorageAccount(credentials, true);

    CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();
    CloudBlobContainer storageContainer = blobClient.GetContainerReference(rootContainer);


    Models.SystemDesignModel blobsList = new Models.SystemDesignModel(storageContainer.ListBlobs(containerName, useFlatBlobListing: true));

    return PartialView(blobsList);

}
@{
        foreach (var item in Model.Files)
        {
            <a href="@item.URL"><img src="@item.URL" height="128" width="128" /></a>

        }

}
 public partial class SystemDesign
    {
        public string URL { get; set; }


        public SystemDesign() { }

        public SystemDesign (string url, string directory)
        {
            this.URL = url;

        }

        public static SystemDesign returnImageURL(IListBlobItem item)
        {

            if (item is CloudBlockBlob)
            {
                var blob = (CloudBlockBlob)item;
                return new SystemDesign 
                {   URL = blob.Uri.ToString(),

                };

            }
            return null;
        }

    }   


    // System Design Model 
    public partial class SystemDesignModel
    {
        public SystemDesignModel() : this(null)
        {
            Files = new List<SystemDesign>();
        }

        public SystemDesignModel(IEnumerable<IListBlobItem> list)
        {
            Files = new List<SystemDesign>();

            foreach (var item in list)
                {
                    SystemDesign test = SystemDesign.returnImageURL(item);
                    Files.Add(test);

                }


        }
        public List<SystemDesign> Files { get; set; }
    }