剃刀页面 asp-page-handler 按钮不起作用

时间:2021-06-16 04:12:25

标签: c# asp.net-core razor-pages

我正在实现一个上传下载文件网络服务器。

到此为止,我边看MS教程边成功实现了。 我实现了一个新的按钮(下载)功能,我想知道如何用网页上的按钮执行特定的功能。

我尝试了很多搜索并尝试关注,但没有成功。

我的代码或其他一些情况似乎有问题,但我是网络编程新手,所以我不知道是什么。

这个cshtml代码

@page "{id}"
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

@model WebApplication1.Pages.test.BufferedMultipleFileUploadPhysicalModel
@{ ViewData["Title"] = "Buffered Multiple File Upload (Physical)"; }


<h1>Upload multiple buffered files to physical storage with one file upload control</h1>

<p>One or more files can be selected by the visitor. The following form's page handler saves the file(s) to disk.</p>

<h4>graphic_tbl</h4>
<hr />


<form enctype="multipart/form-data" method="post">
    <dl>
        <dt>
            <label asp-for="FileUpload.FormFiles"></label>
        </dt>
        <dd>
            <input asp-for="FileUpload.FormFiles" type="file" multiple />
            <span asp-validation-for="FileUpload.FormFiles"></span>
        </dd>
    </dl>
    <input asp-page-handler="Upload" class="btn" type="submit" value="Upload" />
    <div class="form-group">
        <label for="version" class="col-sm-2 control-label">version</label>
        <div class="col-sm-10">
            <input type="text" class="form-control" name="version">
        </div>
    </div>
</form>

<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.view_Join_Model[0].ver)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.view_Join_Model[0].date)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.view_Join_Model[0].dateupdate)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.view_Join_Model[0].resource_link)
            </th>
            <th>
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.view_Join_Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.ver)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.date)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.dateupdate)
                </td>
                <td>
                    @Html.DisplayFor((modelItem => item.resource_link))

                </td>

                <td>
*this part*
                <input asp-page-handler="DownloadFile" class="btn" type="submit" value="Download" />

                    @*<button type="submit" asp-page-handler="DownloadFile" class="btn btn-outline-info"
                id=item.resourceid>
            Donwload
        </button>*@
                </td>

            </tr>
        }
    </tbody>


</table>


<p class="result">
    @Model.Result
</p>


这个cs文件

public class BufferedMultipleFileUploadPhysicalModel : PageModel
    {
        [BindProperty]
        public BufferedMultipleFileUploadPhysical FileUpload { get; set; }
        [BindProperty]
        public model_version_tbl model_Version_Tbl { get; set; }
        [BindProperty]
        public resource_tbl resource_Tbl { get; set; }
        public IList<fileJoinModel> view_Join_Model{ get; set; }

        [BindProperty]
        public string version { get; set; }
        public string Result { get; private set; }
        public SelectList seletcList { get; set; }

        public void OnPost()
        {
            
        }
        public FileContentResult OnGetDownloadFile(int resoruceId)
        {
            var querydata =_context.resource_tbl.Find(resoruceId);
           
            byte[] fileBytes = GetFile(querydata.resource_link);
            return File(
                fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, querydata.resource_link);
        }

        byte[] GetFile(string s)
        {
            System.IO.FileStream fs = System.IO.File.OpenRead(s);
            byte[] data = new byte[fs.Length];
            int br = fs.Read(data, 0, data.Length);
            if (br != fs.Length)
                throw new System.IO.IOException(s);
            return data;
        }
    }

    public class BufferedMultipleFileUploadPhysical
    {
        [Required]
        [Display(Name = "File")]
        public List<IFormFile> FormFiles { get; set; }

        [Display(Name = "Note")]
        [StringLength(50, MinimumLength = 0)]
        public string Note { get; set; }
    }
}

1 个答案:

答案 0 :(得分:0)

1.首先,asp-page-handler不能和GET一起使用,可以参考link。所以需要把OnGetDownloadFile改成 OnPostDownloadFile

2.另外,asp-page-handler需要和form一起使用。可以使用如下代码:

<form method="post">
        <input asp-page-handler="DownloadFile" class="btn" type="submit" value="Download" />
    </form>

3.如果你想在"Upload/{id}"中获取id,你需要把int resoruceId改为int id