Select dropdown list doesn#39;t save selected option - asp.net core web app(选择下拉列表不保存所选选项-ASP.NET核心Web应用程序)
问题描述
我正尝试将数据保存在表中,但由于某种原因,HTML的Select元素始终保存第一个DateTime选项项,而不是保存我选择的项。
在这里我选择了与突出显示的日期对应的选项,但当我保存信息时,第一个选项(22-01-08)是它保存在数据库表上的选项
我的视图模型:
public class BookNowViewModel
{
public string FilmeName { get; set; }
public DateTime FilmeDate { get; set; }
public string seatNum { get; set; }
public int Price { get; set; }
public int FilmeId { get; set; }
}
我设置函数的控制器将从视图检索的数据保存到";cart";表:
[HttpGet]
public IActionResult BookNow(int Id)
{
BookNowViewModel vm = new BookNowViewModel();
var item = _context.Filme.Where(a => a.Id == Id).FirstOrDefault();
var it = _context.Sessao.Where(n => n.FilmeId == Id).FirstOrDefault();
vm.FilmeName = item.Name;
vm.FilmeDate = it.Date;
vm.FilmeId = Id;
vm.Price = Convert.ToInt32(item.Price);
ViewBag.FilmeDate = _context.Sessao.Where(a => a.FilmeId == Id)
.Select(i => new SelectListItem
{
Value = i.Id.ToString(),
Text = i.Date.ToString()
}).ToList();
return View(vm);
}
[HttpPost]
public async Task<IActionResult> BookNow(BookNowViewModel vm,int Id)
{
List<Cart> carts = new List<Cart>();
string seatNum = vm.seatNum.ToString();
int filmeId = vm.FilmeId;
var filme = _context.Filme.Where(a => a.Id == Id).FirstOrDefault();
var sessao = _context.Sessao.Where(n => n.FilmeId == Id).FirstOrDefault();
string[] seatNumArray = seatNum.Split(",");
count = seatNumArray.Length;
if (checkSeat(seatNum, filmeId) == false)
{
foreach (var item in seatNumArray)
{
carts.Add(new Cart
{
Price = Convert.ToInt32(filme.Price),
MovieId = vm.FilmeId,
UserId = _userManager.GetUserId(HttpContext.User),
Date = sessao.Date,
seatNum = item
});;
}
foreach (var item in carts)
{
_context.Cart.Add(item);
await _context.SaveChangesAsync();
//_context.SaveChanges();
}
TempData["Sucess"] = "Seat Booked, See your Cart";
}
else
{
TempData["seatnummsg"] = "Please Change you seat number";
}
return RedirectToAction("Index");
}
我的看法:
div class="col-md-4">
<form asp-action="BookNow" enctype="multipart/form-data">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="FilmeName" class="control-label"></label>
@Model.FilmeName
<span asp-validation-for="FilmeName" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="FilmeDate" class="control-label"></label>
<select name="ok" id="FilmeDate" asp-for="FilmeDate" class="form-control" asp-items="ViewBag.FilmeDate"></select>
</div>
<div class="form-group">
<label asp-for="seatNum" class="control-label"></label>
<input asp-for="seatNum" class="form-control" />
<span asp-validation-for="seatNum" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="FilmeId" class="control-label"></label>
<input asp-for="FilmeId" class="form-control" />
<span asp-validation-for="FilmeId" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Add to Cart" class="btn btn-default btn-success text-white" />
</div>
</form>
推荐答案
我在这里看到几个问题。
<select>
元素的name
属性错误。您可以删除name="ok"
(和id),因为tag-helperasp-for
会自动设置name
和id
属性。如果将其更改为:,则它应该正确绑定到FilmeDate
属性
<select asp-for="FilmeDate" class="form-control" asp-items="ViewBag.FilmeDate"></select>
您正在使用日期填充ViewBag,但将值分配给Id
而不是日期。在值域中也使用日期:
...
.Select(i => new SelectListItem
{
Value = i.Date.ToString(),
Text = i.Date.ToString()
}
然而,另一个问题是在保存到数据库时没有使用视图模型中的值。看起来您正在保存刚刚从数据库中读取的值:Date = sessao.Date
。您应该使用ViewModel中的值:Date = vm.FilmeDate
。
...
// only 1 for loop required
foreach (var item in seatNumArray)
{
var cart = new Cart
{
Price = Convert.ToInt32(filme.Price),
MovieId = vm.FilmeId,
UserId = _userManager.GetUserId(HttpContext.User),
Date = vm.FilmeDate, // use the value selected the viewmodel
seatNum = item
};
_context.Cart.Add(cart);
}
// save changes after adding all items
await _context.SaveChangesAsync();
您只需要一个循环,您也可以在添加所有项之后保存更改。由于您不再在Post方法中使用sessao
,因此可以将其删除。
旁白:如果您正在检查checkSeat(seatNum, filmeId)
中特定电影的座位是否可用,您可能还需要考虑电影日期。
这篇关于选择下拉列表不保存所选选项-ASP.NET核心Web应用程序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:选择下拉列表不保存所选选项-ASP.NET核心Web应用程序
基础教程推荐
- c# Math.Sqrt 实现 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 如何激活MC67中的红灯 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01