Показать список в представлении через TempData или ViewBag - PullRequest
0 голосов
/ 01 мая 2020

У меня есть некоторые проблемы, и я не знаю, что делать. Я попробовал несколько решений для этого, но это foreach l oop всегда оказывается "нулевым". В этом foreach произошел сбой, и он говорит: «Ссылка на объект не установлена ​​для экземпляра объекта». Вот мой контроллер;

    public class HomeController : Controller
{
    public int count;
    private readonly IConfiguration configuration;
    private IHostingEnvironment _env;
    private readonly string _webRootPath;
    public string _dir;
    public HomeController(IConfiguration config, IHostingEnvironment env)
    {
        this.configuration = config;
        _webRootPath = env.WebRootPath;
    }
    public async Task<IActionResult> FileUpload(IEnumerable<IFormFile> files)
    {
        var targetFolder = Path.Combine(_webRootPath, "images");
        foreach (var file in files)
        {
            count = 0;
            var fileName = $"{Guid.NewGuid()}.png";
            using (var fileStream = new FileStream(Path.Combine(targetFolder, fileName), FileMode.Create, FileAccess.Write))
            {
                file.CopyTo(fileStream);
                count++;
            }
            string publicPath = "/images/" + fileName;
            for (int i = 0; i < count; i++)
            {
                List<string> test = new List<string>();
                test.Add(publicPath.ToString());
                TempData["link"] = test;      
            }

        }
        return new RedirectResult(@"Privacy");
    }
    public IActionResult Privacy()   //Privacy name here is just example it can change
    {
        //List<string> Data = TempData["link"] as List<string>;
        //TempData.Keep();
        //ViewBag.link = Data;
        return View(TempData["link"] as string[]);
    }
}

А это моя конфиденциальность .cshtml;

    <label>Link:</label><br />
        @*<input type="text" name="link" size="100" value="@TempData["link"]" /><br />*@
        @foreach (var item in Model)
        {
            <textarea cols="102" rows="5" disabled="disabled" style="resize:none;">@item</textarea><br />
        }

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

Похоже, из вашего кода вы используете asp. net core 2.x.

Убедитесь, что установлено CheckConsentNeeded false:

services.Configure<CookiePolicyOptions>(options =>
{
    // This lambda determines whether user consent for non-essential cookies is needed for a given request.
    options.CheckConsentNeeded = context => false;
    options.MinimumSameSitePolicy = SameSiteMode.None;
});
0 голосов
/ 01 мая 2020

Поскольку вы уже передаете данные в представление, т.е. в представление (данные), вы можете просто указать модель в представлении. Так что ваша privacy.cs html будет:

@model string[]
@{
    ViewData["Title"] = "Privacy Policy";
}
<label>Link:</label>
<br />
@foreach (var item in Model)
{
    <textarea cols="102" rows="5" disabled="disabled" style="resize:none;">@item</textarea>
    <br />
}

А потом в контроллере:

using System;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;

namespace CheckMate.Web.Controllers
{
    public class HomeController : Controller
    {
        public int count;
        private readonly IConfiguration configuration;
        private readonly string _webRootPath;
        public string _dir;
        public HomeController(IConfiguration config, IWebHostEnvironment env)
        {
            this.configuration = config;
            _webRootPath = env.WebRootPath;
        }
        public async Task<IActionResult> FileUpload(IEnumerable<IFormFile> files)
        {
            var targetFolder = Path.Combine(_webRootPath, "images");
            foreach (var file in files)
            {
                count = 0;
                var fileName = $"{Guid.NewGuid()}.png";
                using (var fileStream = new FileStream(Path.Combine(targetFolder, fileName), FileMode.Create, FileAccess.Write))
                {
                    file.CopyTo(fileStream);
                    count++;
                }
                string publicPath = "/images/" + fileName;
                for (int i = 0; i < count; i++)
                {
                    List<string> test = new List<string>();
                    test.Add(publicPath.ToString());
                    TempData["link"] = test;
                }

            }
            return new RedirectResult(@"Privacy");
        }
        public IActionResult Privacy()   //Privacy name here is just example it can change
        {
            //TempData.Keep();
            return View(TempData["link"] as string[]);
        }

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...