gpt4 book ai didi

javascript - ModelState.AddModelError 不在 asp.net.core RAZOR 页面中显示任何消息

转载 作者:行者123 更新时间:2023-11-29 10:57:31 26 4
gpt4 key购买 nike

在我的测试 ASP.NET.CORE 项目中,我在我的 razor codeBehind 页面中添加了一个 ModelState 自定义错误,但它对 Html.ValidationMessageFor 没有任何作用。我必须重定向到 OnGetAsync() 方法才不会收到 nullref 异常

所以,我已经尝试从弹出模式中替换表单,但它没有帮助,将脚本与布局部分 View 连接并直接连接到页面没有给出任何结果,也重命名标签。

这是我的页面隐藏代码

namespace TourStats.Pages
{
public class Index : PageModel
{
private readonly TourStats.Models.PlayerStatsDBContext _context;
public Index(TourStats.Models.PlayerStatsDBContext context)
{
_context = context;
}

[BindProperty]
public Table Table { get; set; }
[BindProperty]
public IList<Table> Tables { get; set; }

public async Task OnGetAsync()
{
Tables = await _context.Tables.ToListAsync();
}

public async Task<IActionResult> OnPostAsync()
{
if (ModelState.IsValid && Table != null)
{
try
{
Table.GameData = DateTime.Now;
_context.Tables.Add(Table);
await _context.SaveChangesAsync();
}
catch(Exception)
{
ModelState.AddModelError("Table", "exc1");
}
}
return RedirectToAction("OnGetAsync");
}
}
}

这是我的 Razor 页面

@page
@using System.Runtime.CompilerServices
@using TourStats.Models
@model TourStats.Pages.Index
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers


@{
Layout = "_Layout";
}

<head>
<!-- MY CSS -->
<link rel="stylesheet" type="text/css" href="~/css/playerPopup.css"/>
<!-- Validation Scripts -->
<script src="lib/jquery/dist/jquery.js"></script>
<script src="lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/jquery-validation/dist/jquery.validate.js"></script>
<script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.js"></script>
<title>MyStats</title>
</head>
<body>
<!-- Create Table Popup Form -->
<div class="container">
<!-- Trigger the modal with a button -->
<button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal">create</button>

<div>
<!-- Modal -->
<div class="modal fade" id="myModal" role="dialog">
<div class="modal-dialog">

<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">&times;</button>
</div>
<div class="modal-body">
<form method="post">
@Html.AntiForgeryToken()

<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="Table.Name">Table name</label>
<input asp-for="Table.Name" class="form-control"/>
<span asp-validation-for="Table.Name" class="text-danger"></span>
@Html.ValidationMessageFor(m => m.Table)
</div>
<br>
<input type="submit" value="Create" class="btn btn-default"/>
</form>
</div>
<div class="modal-footer">

<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>

</div>

 @section Scripts{
@await Html.PartialAsync("_ValidationScriptsPartial")
}

最佳答案

当您重定向时,您会丢失 ModelState 字典中的任何内容。如果出现异常,您应该返回相同的页面,如果 ModelState 无效,您应该返回相同的页面:

public async Task<IActionResult> OnPostAsync()
{
if (ModelState.IsValid && Table != null)
{
try
{
Table.GameData = DateTime.Now;
_context.Tables.Add(Table);
await _context.SaveChangesAsync();
}
catch(Exception)
{
ModelState.AddModelError("Table", "exc1");
Tables = await _context.Tables.ToListAsync();
return Page();
}
}
else
{
Tables = await _context.Tables.ToListAsync();
return Page();
}
return RedirectToAction("OnGetAsync");
}

关于javascript - ModelState.AddModelError 不在 asp.net.core RAZOR 页面中显示任何消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54324800/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com