我遇到一个问题,我无法返回上传到网站并存储在Azure上的文件的文件名和文件大小,即使控制器中存在变量名称。
我的CSHTML片段如下所示:
<table class="table table-striped table-hover ">
<thead>
<tr>
<th>FIlename</th>
<th>Modified</th>
<th>File Size</th>
<th>Download File</th>
<th>Delete File</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@item.Name</td>
<td>Modified</td>
<td>@item.ContentLength</td>
<td><a id="@item" href="@item" onclick="downloadFile('@item')">Download</a></td>
<td><a id="@item" href="#" onclick="deleteFile('@item')">Delete</a></td>
</tr>
}
</tbody>
</table>
正如你所看到的,我有item.Name但是我已经尝试了很多其他的,我将在下面总结一下我尝试过的所有内容。值得注意的是,我能够完全下载和删除文件。
我最重要的控制器部分是:
public class HomeController : Controller
{
BlobStorageService _blobStorageService = new BlobStorageService();
public ActionResult Upload()
{
CloudBlobContainer blobContainer = _blobStorageService.GetCloudBlobContainer();
List<string> blobs = new List<string>();
foreach (var blobItem in blobContainer.ListBlobs())
{
blobs.Add(blobItem.Uri.ToString());
}
return View(blobs);
}
[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{
if (file.ContentLength > 0)
{
CloudBlobContainer blobContainer = _blobStorageService.GetCloudBlobContainer();
CloudBlockBlob blob = blobContainer.GetBlockBlobReference(file.FileName);
blob.UploadFromStream(file.InputStream);
}
return RedirectToAction("Upload");
}
如您所见,ContentLength是文件大小,FileName存在于HomeController上下文中。
我尝试了以下不同的例子以使其正常工作
@ item.FileName,@ item.file.FileName,@ item.HttpPostedFileBase.Filename @ file.FileName,@ item.filename - 和其他人一样。
如果你确实知道答案,你能告诉我你找到它的地方的来源吗,我已经习惯使用Python了解其模块的文档,但这是完全不同的
答案 0 :(得分:0)
问题在于您用于呈现GET上传视图的ViewModel。
[HttpGet]
public ActionResult Upload() {
List<string> blobs = new List<string>();
// add URI strings to list ...
return View(blobs, "Upload");
}
这意味着在您的CSHTML中,Model
是List<string>
。
您真正想要的是一组包含FileName和ContentLength的视图模型,而不仅仅是URI。
public class FileDisplayModel {
public string Uri { get; set; }
public string Name { get; set; }
public int ContentLength { get; set; }
}
在cshtml中使用@model
指令允许IDE检查您是否从控制器传递了正确的模型。
@* Upload.cshtml *@
@model IList<FileDisplayModel>
.net的文档可以在MSDN上找到:HttpPostedFileBase Class
以下是我用于图片上传的教程:File Uploads in ASP.NET MVC with View Models