0

我的控制器中有一个子操作,它将图像返回到我视图中的图像标记,该标记通过@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>

感谢期待您的帮助的人

4

2 回答 2

1

您的方法是正确的,但是您[ChildAction]在错误的地方使用了它,只需将其删除即可。

[仅限儿童操作]属性表示一个属性,该属性用于指示动作方法应仅作为子动作调用。

您没有将方法作为子操作执行,因此在放置该属性后它不会执行。此外,子操作方法为视图的一部分呈现内联 HTML 标记,而不是呈现整个视图。

  • 任何标有 的方法ChildActionOnlyAttribute都只能使用Html.Action()Html.RenderAction()HTML 辅助扩展方法调用。
于 2013-06-16T15:58:08.010 回答
0

我的问题是,当我从图像呈现的动作中删除 ChildActionOnly 属性时,但是当我将其添加回来时,它不会

仅在使用or助手[ChildActionOnly]呈现的操作上使用该属性。这些操作永远不能从使用直接 HTTP 请求的客户端直接访问。当您将标签的属性指向服务器端端点时,浏览器正在向该端点发送 HTTP 请求。并且如果相应的端点被装饰,它就无法呈现给客户端。Html.ActionHtml.RenderActionsrc<img>[ChildActionOnly]

因此,如果您希望使用 HTTP 请求从客户端直接访问此操作,则应从控制器操作中删除此属性。

于 2013-06-16T15:59:33.193 回答