显示另一个控制器MVC5的视图

时间:2014-03-05 18:12:57

标签: asp.net-mvc razor azure asp.net-mvc-5

我开始在.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项目)”句子。

我该怎么做?

2 个答案:

答案 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。在要使用相同视图的新操作中,您必须创建模型对象并将其传递给视图。