c# - 剃须刀页面 asp-page-handler 按钮不起作用
问题描述
我正在实现一个上传下载文件网络服务器。
到目前为止,我在看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.首先,asp-page-handler
不能使用GET
方法,你可以参考链接。所以你需要更改OnGetDownloadFile
为
OnPostDownloadFile
。
2.另外,asp-page-handler
需要配合form使用。可以使用如下代码:
<form method="post">
<input asp-page-handler="DownloadFile" class="btn" type="submit" value="Download" />
</form>
3.如果你想获取 id 。"Upload/{id}"
你需要更改int resoruceId
为int id
.
推荐阅读
- javascript - 根据位置标签填充下拉列表
- reactjs - 重新渲染应用程序导致创建两个 redux 存储实例
- awk - 用于根据多个条件计算记录的 awk 脚本
- python - 如果查询集,如何在 django 控制台中打印 api
- ibm-datapower - APIC 2018.3.7 OVA:API 的组装部分未部署 - 已恢复到更早的版本?
- c# - 在c#中拆分后如何返回字符串值
- javascript - 如何使用 React Native 中的引用更改 TextInput 的值?
- json - 如何使用动态数组的键解析 json?
- java - 有没有办法停止多线程测试,以免在数据库端相互干扰?
- oauth-2.0 - 使用第三方站点进行 OAuth2 / OIDC 授权代码流程 - 了解最终步骤