【发布时间】:2021-08-18 17:29:34
【问题描述】:
城市控制器
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using MVC.Models;
namespace MVC.Controllers
{
public class CityController : Controller
{
private readonly ILogger<CityController> _logger;
public CityController(ILogger<CityController> logger)
{
_logger = logger;
}
public IActionResult CitiesOnMap()
{
List<City> cities = new List<City>();
cities.Add(new City { CityName = "Hatay", Latitude = 123, Longtitude = 435 });
cities.Add(new City { CityName = "Konya", Latitude = 123, Longtitude = 435 });
cities.Add(new City { CityName = "Istanbul", Latitude = 123, Longtitude = 435 });
cities.Add(new City { CityName = "Izmir", Latitude = 123, Longtitude = 435 });
cities.Add(new City { CityName = "Samsun", Latitude = 123, Longtitude = 435 });
cities.Add(new City { CityName = "Antalya", Latitude = 123, Longtitude = 435 });
cities.Add(new City { CityName = "Bursa", Latitude = 123, Longtitude = 435 });
cities.Add(new City { CityName = "Manisa", Latitude = 123, Longtitude = 435 });
cities.Add(new City { CityName = "Mersin", Latitude = 123, Longtitude = 435 });
cities.Add(new City { CityName = "Ankara", Latitude = 123, Longtitude = 435 });
TempData["cities"] = cities;
return View();
}
[HttpPost]
public IActionResult CitiesOnMap(string SelectedCity)
{
if (TempData["cities"] != null)
{
foreach (var redirectedCity in TempData["cities"] as List<City>)
{
if (String.Equals(redirectedCity.CityName, SelectedCity))
{
TempData["selectedCity"] = redirectedCity;
return RedirectToAction(redirectedCity.CityName, "City");
}
}
}
return RedirectToAction(SelectedCity, "City"); ;
}
public IActionResult Hatay()
{
return View();
}
[ResponseCache(Duration = 0, Location = ResponseCacheLocation.None, NoStore = true)]
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
}
}
在我的索引页面中,有一个下拉菜单可以选择地图。用户选择一张地图并单击按钮,然后我使用 RedirectToAction 使用此 CityController 重定向 CitiesOnMap.cshtml。
CitiesOnMap.cshtml
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
ViewData["Title"] = "CitiesOnMap";
}
<div class="text-center pt-5">
<h1 class="display-4 pb-2 ">LET'S SEE THE CITIES!</h1>
<p class="pb-3">Now, Please Choose A City You Want to See on Map.</p>
<h3> @TempData["SelectedMap"] </h3>
<div class="text-center mx-auto pt-5">
<form asp-action="CitiesOnMap" asp-controller="City" method="post">
<div class="row">
<div class="col-9 mx-auto">
<select id="drpEmpList" name="SelectedCity" class="form-control">
<option disabled selected hidden>Choose a City </option>
@foreach (var name in TempData["cities"] as List<MVC.Models.City>)
{
<option>@name.CityName </option>
}
</select>
<input type="hidden" />
</div>
</div>
<div class="row">
<div class="col-md-12 pt-4">
<input type="submit" name="btnSubmit" value="Let's See" class="btn btn-success btn-lg" />
</div>
</div>
</form>
</div>
</div>
我正在发送城市列表,这是我的城市模型的类。在此页面上,用户从 CitiesOnMap.cshtml 文件的下拉列表中选择一个城市。选择后,我想将用户重定向到正确的城市页面。但是当用户选择提交按钮时,如果我不使用 TempData["cities"].Keep() 方法,.net 会抛出 NullReferenceError,因为据我所知,在使用后我无法再次保留我的数据。如果我使用 TempData["cities"].Keep() 方法,我会收到 HTTP 500 错误。而且我认为我必须序列化我的 TempData["cities"] 但我很困惑我有很多问题:(请帮助我
【问题讨论】:
-
HTTP 500 -> 内部服务器错误 -> 查看日志中是否存在未处理的异常
-
@CamiloTerevinto 我该怎么做?我是初级水平
标签: c# asp.net-core asp.net-core-mvc