我开始在.NET中开发,我有一些问题。
我创建了一个将图像上传到Azure的视图。该视图包含在名为Document的Controller中。
我想要的是在另一个控制器视图中显示此视图。该视图完全独立,但当我尝试引用它时,它给我一个错误,我仍然不知道如何解决。
这是“Upload.cshtml”视图
@{
ViewBag.Title = "Upload";
}
<p>
@using (Html.BeginForm("Upload", "Documento", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<input type="file" id="fileToUpload" name="image" />
<input type="submit" id="btnSubmit" value="Upload" />
}
</p>
<ul style="list-style-type: none; padding: 0;">
@foreach (var item in Model)
{
<li>
<img src="@item" alt="images" width="100" height="100" />
<a id="@item" href="#" onclick="deleteImage('@item');">Delete</a>
</li>
}
</ul>
<script type="text/jscript">
//get file size
function deleteImage(item) {
try {
var url = "/Documento/DeleteImage";
$.post(url, { Name: item }, function (data) {
window.location.href = "/Documento/Upload";
alert(data);
});
}
catch (e) {
alert("Error is :" + e);
}
}
</script>
这就是我尝试从另一个Controller Index视图调用视图的方法:
@RenderPage("~/Views/Documento/Upload.cshtml");
@RenderBody();
我得到的错误是因为“@foreach(模型中的var项目)”句子。
我该怎么做?
答案 0 :(得分:1)
看起来您在视图顶部缺少模型。像这样:
@model MyProject.Models.MyModel
其次你的foreach循环需要一个IEnumerable类型。您的模型是IEnumerable还是@ Model.SomeIEnumerable?
最后,无论你的循环中的@item是什么,都应该为你的img src和anchor id属性提供单独的属性。
您显示的代码不完整或您遇到型号问题。以下是如何做我认为你正在寻找的任何例子。
查看模型
public class MyModel
{
public string ProductId {get;set;}
public string ProductSrc {get;set;}
}
查看
@model IEnumerable<MyModel>
<ul>
@foreach(item in Model)
{
<li>
<img src="@item.ProductSrc" />
<a id="@item.ProductId">Delete</>
</li>
}
答案 1 :(得分:0)
将视图移至Views/Shared
文件夹。然后它将可供所有控制器使用,而无需做任何特殊的事情。
此外,您的视图显然希望传入模型,因此您必须使用视图从两个控制器执行此操作。
在有效的控制器中我假设你有类似
的东西return View("Upload", model);
或只是
return View(model);
如果您的操作名为Upload
。在要使用相同视图的新操作中,您必须创建模型对象并将其传递给视图。