我的控制器中有一个子动作,它将图像返回到我视图中的图像标记,该图像标记通过@ Url.action调用动作。我的问题是,当我从动作中移除ChildActionOnly属性时,图像呈现但是当我将其添加回来时它不会。我需要操作来携带此属性,因此无法直接调用它。以下是我的代码。
[ChildActionOnly]
public ActionResult GetImage(int id)
{
var photo = _Db.Photozs.Single(p => p.PhotozId == id);
string path = Server.MapPath("~/Photo"+photo.Url);
var fs = new FileStream(path, FileMode.Open);
return new FileStreamResult(fs, photo.ContentType);
}
这是我的观点
@model IEnumerable<okay.models.photoz>
@{
ViewBag.Title = "Index";
}
<<div class="container-fluid">
@foreach (var item in Model)
{
<div class="pull-left span3">
<img class="img-polaroid" src="@Url.Action("GetImage",new{id=item.PhotozId})"/>
<div class="text-center">@item.Caption</div>
</div>
}
</div>
非常感谢你们的帮助
答案 0 :(得分:1)
您的方法正确,但您在错误的位置使用[ChildAction]
只需删除它。
[ChildActionOnly]属性表示一个属性,用于指示应仅将动作方法作为子动作调用。
您没有将方法作为子操作执行,因此在放置该属性后它不会执行。此外,子操作方法为视图的一部分呈现内联HTML标记,而不是呈现整个视图。
ChildActionOnlyAttribute
的方法都只能使用Html.Action()
或Html.RenderAction()
HTML帮助程序扩展方法进行调用。答案 1 :(得分:0)
我的问题是当我从中删除ChildActionOnly属性时 图像渲染的动作但是当我将其添加回来时它不会
仅对使用[ChildActionOnly]
或Html.Action
帮助程序呈现的操作使用Html.RenderAction
属性。这些操作永远不会使用直接HTTP请求从客户端直接访问。当您将src
标记的<img>
属性指向服务器端端点时,浏览器正在向此端点发送HTTP请求。如果相应的端点用[ChildActionOnly]
修饰,则无法将其呈现给客户端。
因此,如果您希望使用HTTP请求从客户端直接访问此操作,则应从控制器操作中删除此属性。