0

ユーザーが自分の Web サイトの Uploads フォルダーにアップロードした添付ファイル (保存ではなく) を開くか表示しようとしています。添付機能は、主に現在の Web サイトのバグのスクリーン ショットに使用されます。ユーザーが送信したすべてのバグを表示するバグ インデックス ビューがあり、リンクのようなペーパー クリップをクリックして添付ファイルを表示できるようにしたいと考えています。このようなことを行う方法がわかりません。部分ビューまたは他のヘルパーメソッドを使用する必要がありますか? 添付ファイルを表示するメソッドをいくつか書き込もうとしましたが、ビューで正しく呼び出しているとは思いません。アップロード メソッドとビュー アタッチメント メソッドのビュー コードとコントローラー コードを含めました。診断のために他のコードが必要な場合はお知らせください。ご協力いただきありがとうございます!

バグ インデックス ビュー

@model PagedList.IPagedList<DBFirstMVC.Models.bug>

@{
    ViewBag.Title = "BugIndex";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@using PagedList;

<h2 class="corporate sifr">@ViewBag.Title</h2>


<div class="crossband">
@using (Html.BeginForm())
{
    <div class="lefty">
        Search Bugs Index: @Html.TextBox("SearchString", "", new { @class = "text" })        
    </div>
        <input type = "submit" value = "Search" class = "button1" />
}

    <div class="righty">
    @Html.ActionLink("Report a Bug", "ReportBugs", "Support", null, new { @class = "button1" })

    </div>

</div>

<div class="crossband">
    <div class="lefty">

    Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber)
    of @Model.PageCount
    &nbsp;&nbsp;&nbsp;&nbsp;
    @if (Model.HasPreviousPage)
    {
        @Html.ActionLink("<<", "", new { page = 1, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter, Versions = ViewBag.SelectedVersion })
        @Html.Raw(" ");
        @Html.ActionLink("< Prev", "", new { page = Model.PageNumber - 1, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter, Versions = ViewBag.SelectedVersion })
    }
    else
    {
        @:<<
        @Html.Raw(" ");
        @:< Prev
    }

    @if (Model.HasNextPage)
    {
        @Html.ActionLink("Next >", "", new { page = Model.PageNumber + 1, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter, Versions = ViewBag.SelectedVersion })
        @Html.Raw(" ");
        @Html.ActionLink(">>", "", new { page = Model.PageCount, sortOrder = ViewBag.CurrentSort, currentFilter = ViewBag.CurrentFilter, Versions = ViewBag.SelectedVersion })
    }
    else
    {
        @:Next >
        @Html.Raw(" ")
        @:>>
    }
    </div>

    <div class="righty">
    Showing Records @Model.FirstItemOnPage to @Model.LastItemOnPage from @Model.TotalItemCount records
    </div>
</div>


<table>
    <tr>

        <th>
            @Html.ActionLink("Date Submitted", "BugIndex", new { sortOrder = ViewBag.currentOrder == "asc" ? "desc" : "asc", sortField = "date_submitted"})
            @if (ViewBag.currentOrder == "asc" && ViewBag.CurrentField == "date_submitted"){<img id="asc" src="@Url.Content("~/Images/ico_tablesortoffset_asc.gif")" alt = "Asc Arrow" />}
            @if (ViewBag.currentOrder == "desc" && ViewBag.CurrentField == "date_submitted"){<img id="desc" src="@Url.Content("~/Images/ico_tablesortoffset_desc.gif")" alt = "Desc Arrow" />}
        </th>
        <th>
            @Html.ActionLink("Submitted By", "BugIndex", new { sortOrder = ViewBag.currentOrder == "asc" ? "desc" : "asc", sortField = "submitted_by"})
            @if (ViewBag.currentOrder == "asc" && ViewBag.CurrentField == "submitted_by"){<img id="asc" src="@Url.Content("~/Images/ico_tablesortoffset_asc.gif")" alt = "Asc Arrow" />}
            @if (ViewBag.currentOrder == "desc" && ViewBag.CurrentField == "submitted_by"){<img id="desc" src="@Url.Content("~/Images/ico_tablesortoffset_desc.gif")" alt = "Desc Arrow" />}
        </th>
        <th>
            @Html.ActionLink("Description", "BugIndex", new { sortOrder = ViewBag.currentOrder == "asc" ? "desc" : "asc", sortField = "Description" })
            @if (ViewBag.currentOrder == "asc" && ViewBag.CurrentField == "Description"){<img id="asc" src="@Url.Content("~/Images/ico_tablesortoffset_asc.gif")" alt = "Asc Arrow" />}
            @if (ViewBag.currentOrder == "desc" && ViewBag.CurrentField == "Description"){<img id="desc" src="@Url.Content("~/Images/ico_tablesortoffset_desc.gif")" alt = "Desc Arrow" />}
        </th>
        <th>
            @Html.ActionLink("Priority", "BugIndex", new { sortOrder = ViewBag.currentOrder == "asc" ? "desc" : "asc", sortField = "Priority" })
            @if (ViewBag.currentOrder == "asc" && ViewBag.CurrentField == "Priority"){<img id="asc" src="@Url.Content("~/Images/ico_tablesortoffset_asc.gif")" alt = "Asc Arrow" />}
            @if (ViewBag.currentOrder == "desc" && ViewBag.CurrentField == "Priority"){<img id="desc" src="@Url.Content("~/Images/ico_tablesortoffset_desc.gif")" alt = "Desc Arrow" />}
        </th>
        <th>
            @Html.ActionLink("Estimated Completion Date", "BugIndex", new { sortOrder = ViewBag.currentOrder == "asc" ? "desc" : "asc", sortField = "estimated_completion_date" })
            @if (ViewBag.currentOrder == "asc" && ViewBag.CurrentField == "estimated_completion_date"){<img id="asc" src="@Url.Content("~/Images/ico_tablesortoffset_asc.gif")" alt = "Asc Arrow" />}
            @if (ViewBag.currentOrder == "desc" && ViewBag.CurrentField == "estimated_completion_date"){<img id="desc" src="@Url.Content("~/Images/ico_tablesortoffset_desc.gif")" alt = "Desc Arrow" />}
        </th>
        <th>
            @Html.ActionLink("Status", "BugIndex", new { sortOrder = ViewBag.currentOrder == "asc" ? "desc" : "asc", sortField = "status" })
            @if (ViewBag.currentOrder == "asc" && ViewBag.CurrentField == "status"){<img id="asc" src="@Url.Content("~/Images/ico_tablesortoffset_asc.gif")" alt = "Asc Arrow" />}
            @if (ViewBag.currentOrder == "desc" && ViewBag.CurrentField == "status"){<img id="desc" src="@Url.Content("~/Images/ico_tablesortoffset_desc.gif")" alt = "Desc Arrow" />}
        </th>
        <th>
            @Html.ActionLink("Developer Comments", "BugIndex", new { sortOrder = ViewBag.currentOrder == "asc" ? "desc" : "asc", sortField = "developer_comments" })
            @if (ViewBag.currentOrder == "asc" && ViewBag.CurrentField == "developer_comments"){<img id="asc" src="@Url.Content("~/Images/ico_tablesortoffset_asc.gif")" alt = "Asc Arrow" />}
            @if (ViewBag.currentOrder == "desc" && ViewBag.CurrentField == "developer_comments"){<img id="desc" src="@Url.Content("~/Images/ico_tablesortoffset_desc.gif")" alt = "Desc Arrow" />}
        </th>
        <th>
            @Html.ActionLink("Attachment", "BugIndex", new { sortOrder = ViewBag.currentOrder == "asc" ? "desc" : "asc", sortField = "attachment" })
            @if (ViewBag.currentOrder == "asc" && ViewBag.CurrentField == "attachment"){<img id="asc" src="@Url.Content("~/Images/ico_tablesortoffset_asc.gif")" alt = "Asc Arrow" />}
            @if (ViewBag.currentOrder == "desc" && ViewBag.CurrentField == "attachment"){<img id="desc" src="@Url.Content("~/Images/ico_tablesortoffset_desc.gif")" alt = "Desc Arrow" />}
        </th>

        <th></th>
    </tr>

@{
    var row_class = "odd";
}

@foreach (var item in Model)
{
    row_class = row_class == "odd"? "even" : "odd";    
    <tr class="@row_class">
        <td>
            @Html.DisplayFor(modelItem => item.date_submitted)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.submitted_by)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.description)
        </td>
        <td>

            @ViewBag.Priorities[(item.priority-1)].PRIORITY
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.estimated_completion_date)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.status)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.developer_comments)
        </td>
        <td>
            @if (item.attachment != null){<img id="success" src="@Url.Content("~/Images/attach.png")" alt = "attachment" />}
            @Url.Action("", "ViewAttachment", new { id = item.bug_pk}) <!--<----- I think this is the problem-->

        </td>
        <td>
            @Html.ActionLink("Edit", "EditBugs", new { id = item.bug_pk }) |
            @Html.ActionLink("Delete", "DeleteBugs", new { id = item.bug_pk })
        </td>
    </tr>
}

</table>

コントローラ メソッド

[Authorize]
        public String Uploadfile(HttpPostedFileBase file)
        {
            if (file != null && file.ContentLength > 0)
            {
                var fileName = Path.GetFileName(file.FileName);
                var path = Path.Combine(Server.MapPath("~/Uploads"), fileName);
                string fileNameWithoutExtension = System.IO.Path.GetFileNameWithoutExtension(file.FileName);
                int iteration = 1;
                while (System.IO.File.Exists((path)))
                {
                    fileName = string.Concat(fileNameWithoutExtension, "-", iteration, System.IO.Path.GetExtension(file.FileName));
                    path = Path.Combine(Server.MapPath("~/Uploads"), fileName);
                    iteration++;
                }
                file.SaveAs(path);
            }
            return file.FileName;
        }

        public ActionResult ViewAttachment(HttpPostedFileBase file)
        {

                var fileName = Path.GetFileName(file.FileName);
                var path = Path.Combine(Server.MapPath("~/Uploads"), fileName);


                return View(file.FileName);
        }
4

2 に答える 2

3

そのpurtiular Imageリソースへactionの を受け入れるメソッドを用意してください。ID画像をアップロードすると、画像への id / パスが表示されます。このように HREF としてグリッドに表示します。

@Html.ActionLink("View","ViewAttachment","Bugs",null,new { @id="SomeIdofImage"})

のようなアンカータグの HTML マークアップを生成します

<a href="Bugs/ViewAttachment/SomeIdofImage">View</a>

ハードコーディングされた SomeIdofImageは、動的な値 (イメージ識別子) に置き換える必要があります。

actionコントローラにメソッドを追加して、パラメータとしてBugを読み取り、画像を返します。Id

public ActionResult ViewAttachment(string id)
{
  var imgPath=SomeMethodtoGetTheFullPathToImg(id);
  return File(imgPath, "image/jpeg")
}

SomeMethodtoGetTheFullPathToImgID を受け取り、サーバーに保存されている画像へのパスを返すメソッドがあると仮定します。

于 2012-07-18T15:56:51.957 に答える
0

だから私はこれを機能させ、これが私がやった方法です。

System.IO メソッドを許可するように ViewAttachment Controller が変更されました

public ActionResult ViewAttachment(string fileName)
        {
            try
            {
                var fs = System.IO.File.OpenRead(Server.MapPath("~/Uploads/" + fileName));
                return File(fs, "application/jpg", fileName);
            }
            catch
            {
                throw new HttpException(404, "Couldn't find " + fileName);
            }


        }

ダウンロードという言葉の代わりにペーパークリップ画像をリンクに使用できるようにビューが変更されました

 <td>
        @if (item.attachment != null)
        {
            <a href = @Url.Action("ViewAttachment", new { fileName = item.attachment }) > <img src = "@Url.Content("~/Images/attach.png")"  alt = "attachment" /> </a>  
        }
 </td>

既存のデータベースを使用していたため、モデルは変更されませんでした。

これが、アップロードフォルダーにアップロードされた画像を表示していた問題を解決した方法です。このソリューションは、MVC 3 および MS SQL サーバー 2008 R2 で完全に機能します。

于 2012-07-23T13:53:24.017 に答える