如何在 Razor 页面上单击按钮下载文件?
How to download a file on button click on a Razor page?
我正在生成一个 XML 文件,其中填充了来自 Razor 页面的信息,我想通过单击下载按钮下载这个生成的 XML 文件。我是 Razor 页面的新手,返回 XML 文件作为 FileResult 对我不起作用。关于为我的 <a>
编写什么以及如何设置 C# 注释等的指导将非常有帮助。
我的 .cshtml 代码是:
<br/>
@Html.ActionLink("Link name", "SaveFile", "EditLicense",
new {
LicenseFileJson = JsonConvert.SerializeObject(Model.License)
})
<br/>
当它显示在页面上时,我得到:
<br/> <a href="">Link name</a><br/>
点击它什么也没做。
我的操作代码是:
public class EditLicenseController : Controller
{
public FileResult SaveFile(string LicenseFileJson)
{
License License = (License)JsonConvert.DeserializeObject(LicenseFileJson);
LicenseTool tool = new LicenseTool(License);
string licenseFileString = tool.ToFileString();
byte[] bytes = Encoding.ASCII.GetBytes(licenseFileString);
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(licenseFileString);
writer.Flush();
Response.Headers.Add("Content-Disposition", "attachment;");
return File(bytes, "text/xml", "testing123.xml");
}
...
当我点击 link 时,我在 chrome 开发工具的网络选项卡中也没有看到任何表明它正在工作的信息。
尝试这样做:
更改视图:
@Html.ActionLink("Link name", "SaveFile", "EditLicense", new
{
LicenseFileJson = JsonConvert.SerializeObject(Model.License)
});
更改操作:
public FileResult SaveFile(string LicenseFileJson)
{
License License = (License)JsonConvert.DeserializeObject(LicenseFileJson);
LicenseTool tool = new LicenseTool(License);
string licenseFileString = tool.ToFileString();
//byte[] bytes = Encoding.ASCII.GetBytes(licenseFileString);
//var stream = new MemoryStream();
//var writer = new StreamWriter(stream);
//writer.Write(licenseFileString);
//writer.Flush();
//Response.Headers.Add("Content-Disposition", "attachment;");
return File(System.Text.Encoding.UTF8.GetBytes(licenseFileString), "text/xml", "testing123.xml");
}
编辑:
添加示例:
查看:
@Html.ActionLink("link name", "SaveFile", "EditLicense", new
{
LicenseFileJson = "SOME TEXT JUST TO TEST"
});
我的 link 呈现为:<a href="/EditLicense/SaveFile?LicenseFileJson=%22SOME%20TEXT%20JUST%20TO%20TEST%22">link name</a>
操作:
public FileResult SaveFile(string LicenseFileJson)
{
return File(System.Text.Encoding.UTF8.GetBytes(LicenseFileJson), "text/xml", "test");
}
下载成功:
空 href
值表示您的路由配置有问题。确保在 Startup.cs
中添加了以下行
app.UseMvcWithDefaultRoute();
或其等效物
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
我正在生成一个 XML 文件,其中填充了来自 Razor 页面的信息,我想通过单击下载按钮下载这个生成的 XML 文件。我是 Razor 页面的新手,返回 XML 文件作为 FileResult 对我不起作用。关于为我的 <a>
编写什么以及如何设置 C# 注释等的指导将非常有帮助。
我的 .cshtml 代码是:
<br/>
@Html.ActionLink("Link name", "SaveFile", "EditLicense",
new {
LicenseFileJson = JsonConvert.SerializeObject(Model.License)
})
<br/>
当它显示在页面上时,我得到:
<br/> <a href="">Link name</a><br/>
点击它什么也没做。
我的操作代码是:
public class EditLicenseController : Controller
{
public FileResult SaveFile(string LicenseFileJson)
{
License License = (License)JsonConvert.DeserializeObject(LicenseFileJson);
LicenseTool tool = new LicenseTool(License);
string licenseFileString = tool.ToFileString();
byte[] bytes = Encoding.ASCII.GetBytes(licenseFileString);
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(licenseFileString);
writer.Flush();
Response.Headers.Add("Content-Disposition", "attachment;");
return File(bytes, "text/xml", "testing123.xml");
}
...
当我点击 link 时,我在 chrome 开发工具的网络选项卡中也没有看到任何表明它正在工作的信息。
尝试这样做:
更改视图:
@Html.ActionLink("Link name", "SaveFile", "EditLicense", new
{
LicenseFileJson = JsonConvert.SerializeObject(Model.License)
});
更改操作:
public FileResult SaveFile(string LicenseFileJson)
{
License License = (License)JsonConvert.DeserializeObject(LicenseFileJson);
LicenseTool tool = new LicenseTool(License);
string licenseFileString = tool.ToFileString();
//byte[] bytes = Encoding.ASCII.GetBytes(licenseFileString);
//var stream = new MemoryStream();
//var writer = new StreamWriter(stream);
//writer.Write(licenseFileString);
//writer.Flush();
//Response.Headers.Add("Content-Disposition", "attachment;");
return File(System.Text.Encoding.UTF8.GetBytes(licenseFileString), "text/xml", "testing123.xml");
}
编辑:
添加示例:
查看:
@Html.ActionLink("link name", "SaveFile", "EditLicense", new
{
LicenseFileJson = "SOME TEXT JUST TO TEST"
});
我的 link 呈现为:<a href="/EditLicense/SaveFile?LicenseFileJson=%22SOME%20TEXT%20JUST%20TO%20TEST%22">link name</a>
操作:
public FileResult SaveFile(string LicenseFileJson)
{
return File(System.Text.Encoding.UTF8.GetBytes(LicenseFileJson), "text/xml", "test");
}
下载成功:
空 href
值表示您的路由配置有问题。确保在 Startup.cs
app.UseMvcWithDefaultRoute();
或其等效物
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});