首页 > 解决方案 > 将上传的文件数据读取到 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;

            
        }
    }
}

标签: c#asp.net.netasp.net-mvcasp.net-core

解决方案


推荐阅读