gpt4 book ai didi

c# - 显示来自 ModelState.Values 的错误

转载 作者:太空宇宙 更新时间:2023-11-03 18:57:46 24 4
gpt4 key购买 nike

我正在使用 ASP.net 核心 Razor 引擎。我试图在我的 html 中显示我的错误。不确定如何修复我的代码。我如何显示来自的错误ModelState.Values 在我的 cshtml 页面中?

这是我的 Controller

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using quotingDojo.Models;

namespace quotingDojo.Controllers
{
public class HomeController : Controller
{
// GET: /Home/
[HttpGet]
[Route("")]
public IActionResult Index()
{
return View();
}

[HttpPost]
[Route("quotes")]
public IActionResult Quotes(string Name, string Quote)
{
Home NewHome = new Home
{
Name = Name,
Quote = Quote
};

if(TryValidateModel(NewHome) == false) {
ViewBag.errors = ModelState.Values;
System.Console.WriteLine("??????????????");
System.Console.WriteLine(ModelState.ErrorCount);
System.Console.WriteLine("??????????????");
}

return RedirectToAction("Index");
}
}
}

ModelState.ErrorCount 打印出正确的错误数。

这是我的模型

using System.ComponentModel.DataAnnotations;


namespace quotingDojo.Models
{
public class Home
{
[Required(ErrorMessage ="Please enter your name")]
[Display(Name="*username")]
[DataType(DataType.Text)]
[MinLength(3)]
public string Name {get; set;}

[Required]
[MinLength(5)]
public string Quote{get; set;}
}
}

这是我的cshtml页面

<div id="wrapper">  
<h1>Welcome to the Quoting Dojo</h1>
<form action="quotes" method="post">
<p>
<label>Your Name</label>
<input type="text" name="Name"/>
</p>
<p>
<label>Your Quote</label>
<textarea name="Quote" id="quote" cols="30" rows="10"></textarea>
</p>
<input type="submit" name="submit" value="Add my quote!"/>
<form action="quotes" method="get">
<input type="submit" name="submit" value="Skip to quotes!"/>
</form>
</form>

</div>

<div>
<p> Test</p>
@{
if(ViewBag.errors != null)
{
foreach(var error in ViewBag.errors)
{
//If there are any errors for a field...
if(@error.errors.Count > 0)
{
// We show the first error for that field
<p>@error.errors[0].ErrorMessage</p>
}
}
}

}
</div>

我使用的是 Visual Studio Code,所以任何构建到常规 Visual Studio 中的东西我都无法访问。

最佳答案

无需使用 ViewBag 显式传递错误。当模型验证失败时,模型状态字典将出现错误。您所要做的就是在模型验证通过时执行您的代码。

此外,由于您已经有了一个类,您可以将其用作 http 发布操作方法的参数。默认模型绑定(bind)器将能够将表单值映射到此类对象的属性。

[HttpPost]
[Route("quotes")]
public IActionResult Quotes(Home model)
{
if(!ModelState.IsValid)
{
return View(model);
}
//continue your code to save
return RedirectToAction("Index");
}

并且在 View 中您可以使用验证辅助方法来显示验证错误

@Html.ValidationSummary(false)

此外,我注意到您在 View 中有嵌套表单。嵌套表单不是有效标记。所以我建议你也解决这个问题。

<h1>Welcome to the Quoting Dojo</h1>
@using(Html.BeginForm("Quote","Home"))
{
<p>@Html.ValidationSummary(false)</p>
<p>
<label>Your Name</label>
@Html.TextBoxFor(s=>s.Name)
</p>
<p>
<label>Your Quote</label>
@Html.TextAreaFor(d=>d.Quote)
</p>
<input type="submit" name="submit" value="Add my quote!"/>

}
<form action="quotes" method="get">
<input type="submit" name="submit" value="Skip to quotes!"/>
</form>

关于c# - 显示来自 ModelState.Values 的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41401445/

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