【发布时间】:2020-10-18 09:27:25
【问题描述】:
我正在尝试向我的一些字段添加一些表单验证。我有一个下拉菜单和一个输入框。两个输入都需要验证。我的目标是如果其中任何一个无效,则向用户显示错误消息。该表单允许用户使用新作者创建现有书籍的副本。下拉列表包含数据库中的书籍列表,用户在文本框中输入新作者的姓名。提交按钮会创建一个包含新作者的现有图书的副本。
使用 jQuery、jquery.validate.js 和 jquery.validate.unobtrusive.js 我能够完成向用户显示错误消息,但是一旦页面加载就会进行检查,因此错误消息显示为页面加载后。 (也许我需要一个隐藏字段,或者我必须修改我的 HttpGet 处理程序)。
现在,如果用户尝试在不选择一本书和/或输入作者姓名的情况下提交表单,则路径保持不变,但表单消失了,屏幕上会显示一个 json 对象,并带有400 状态,它显示“书名字段是必需的”和“作者字段是必需的”。我只想要输入字段旁边的红色文本,说明它们不能留空,我该怎么做?谢谢!
我的模特:
public int ID { get; set; }
[Required]
public string bookName { get; set; }
[Required]
public string Author { get; set; }
我的cshtml:
<form method="post" asp-controller="Index" asp-action="Index" role="post">
<div class="form-group">
<label asp-for="bookName"></label>
<select name="bookName" asp-items="@(new SelectList(ViewBag.message, "ID", "bookName"))">
</select>
<span asp-validation-for="bookName">Please select a book.</span>
</div>
<div class="form-group">
<label asp-for="Author"></label>
<input asp-for="Author" class="form-control" />
<span asp-validation-for="Author">Please type in the author's name.</span>
</div>
<div class="form-group">
<input type="submit" value="Submit" class="btn btn-primary" />
</div>
</form>
我的控制器:
[HttpGet("[action]")]
[Route("/Index")]
[Produces("application/json")]
public IActionResult Index()
{
return View();
}
[HttpPost("[action]")]
[Route("/Index")]
[Produces("application/json")]
public async Task<IActionResult> Index([FromForm] bookModel model)
{
if(ModelState.IsValid)
{
//do stuff
return View(model)
}
else
{
//display an error message & remain on same page
}
}
【问题讨论】:
-
试过这个吗?
if (!ModelState.IsValid){return Page();} -
@naveen 您好,感谢您的回复!我正在为这个应用程序使用 MVC,所以我的应用程序后面没有 cshtml.cs 代码。如果我没记错的话,我不能返回页面,只能返回视图。
标签: jquery validation asp.net-core model-view-controller razor