通过TempData或ViewBag在视图中显示列表



我遇到了一些问题,不知道该怎么办。我尝试了几种解决方案,但foreach循环总是变为"null">
它在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 />
}

由于您已经将数据传递给View,即View(data(,因此您可以简单地在View中指定Model。所以你的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[]);
}
}
}

从您的代码来看,您似乎使用了asp.net核心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;
});

最新更新