c# - 将上传的文件数据读取到 index.cshtml
问题描述
我目前正在做一个基本项目,我将一个 xml 文件上传到 ASP.NET Core 网站,然后简单地将数据读取到索引页面上。我已经设法让文件上传部分正常工作,但我根本无法将数据读出到页面上。似乎 index.cshtml.cs OnGet() 没有被调用?有人可以指出我错过了什么。代码如下:
索引.cshtml
@page
@model IndexModel
@{
ViewData["Title"] = "Home page";
}
<h1>Home Page</h1>
<div>
<h4>Single file upload</h4>
<form asp-controller="Home" asp-action="SingleFile" enctype="multipart/form-data" method="post">
<input type="file" name="file"/>
<button type="submit">Submit</button>
</form>
</div>
<div>
<p>
File_Data:@Model.data </p>
</div>
index.cshtml.cs
using File_Upload_Processes.Services;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Xml;
namespace File_Upload_Processes.Pages
{
public class IndexModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
public XMLDataSendService XMLService;
public string data;
public IndexModel(ILogger<IndexModel> logger, XMLDataSendService XML_Service)
{
_logger = logger;
XMLService = XML_Service;
}
public void OnGet()
{
Console.Write("test");
int file_present = XMLService.File_Present();
Console.Write(file_present);
if (file_present == 1)
{
XmlDocument doc = XMLService.Load_XML_Doc();
data = XMLService.Get_Node_Data(doc);
}
}
}
}
HomeController.cs(用于上传文件)
using File_Upload_Processes.Services;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Xml;
namespace File_Upload_Processes.Controllers
{
public class HomeController : Controller
{
private IWebHostEnvironment _env;
public XMLDataSendService Service;
public string data;
public HomeController(IWebHostEnvironment env)
{
_env = env;
}
public IActionResult Index()
{
ViewBag.data_ = data;
return View();
}
public IActionResult SingleFile(IFormFile file)
{
var dir = _env.ContentRootPath;
using (var fileStream = new FileStream(Path.Combine(dir, "file.xml"), FileMode.Create, FileAccess.Write))
{
file.CopyTo(fileStream);
}
return RedirectToAction("Index");
}
}
}
XMLDataSendService.cs(用于加载文件、读取数据和检查文件是否存在)
using File_Upload_Processes.Models;
using Microsoft.AspNetCore.Hosting;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using System.Xml;
namespace File_Upload_Processes.Services
{
public class XMLDataSendService
{
public IWebHostEnvironment WebHostEnviroment { get; }
public XMLDataSendService(IWebHostEnvironment webHostEnvironment)
{
WebHostEnviroment = webHostEnvironment;
}
private string XML_Doc_Name
{
get { return Path.Combine(WebHostEnviroment.WebRootPath, "file.xml"); }
}
public XmlDocument Load_XML_Doc()
{
XmlDocument doc = new XmlDocument();
doc.PreserveWhitespace = true;
try { doc.Load(XML_Doc_Name); }
catch
{
Console.Write("ERROR: FILE NOT LOADED");
}
return doc;
}
public string Get_Node_Data(XmlDocument doc)
{
var data = doc.DocumentElement.OuterXml;
string output = data.ToString();
return output;
}
public int File_Present()
{
string[] filePaths = Directory.GetFiles(this.WebHostEnviroment.WebRootPath);
List<File_Model> files = new List<File_Model>();
foreach(string filePath in filePaths){
if(Path.GetFileName(filePath) == "file.xml")
{
return 1;
}
}
return 0;
}
}
}
解决方案
推荐阅读
- android - Kotlin - 猫王操作员不当行为
- javascript - 在窗口调整大小时激活功能
- javascript - 如何在 Directus 中创建报告页面
- sql - 尝试在表达式作为结果的情况下使用条件
- python - NN回归损失值不减少
- javascript - 一行正则表达式,匹配由空格分隔的所有单词
- reactjs - 在页面 web react.js 的开头自动播放 mp3
- c++ - 根据 if 语句中的类型实例化不带参数 / 的 C++ 模板类
- c++ - 没有互斥锁的多线程套接字写入是安全的
- php - 如何配置 Yii2 以使用 Windows 身份验证连接到 SQLSRV?