gpt4 book ai didi

asp.net-mvc-2 - 页面加载时显示验证消息

转载 作者:行者123 更新时间:2023-12-04 01:21:58 25 4
gpt4 key购买 nike

我在 ASP.NET MVC 2.0 中的验证存在问题。我在 Controller 中使用相同的 Action 来执行用户请求。
例如:

public ActionResult Index(ReportModel model)
{
if (!model.IsInitialDisplay && ModelState.IsValid)
{
model.Result = service.GetResult(model);
}
return View(model);
}

在 ReportModel 中,我定义了一个标志 IsInitialDisplay 来确定页面是否初始显示:
public class ReportModel
{
[Required(ErrorMessage = "*")]
public string Criteria { get; set; }
public bool IsInitialDisplay { get; set; }
public ReportResult Result { get; set; }

public ReportModel()
{
IsInitialDisplay = true;
}
}

在 View 中,我使用以下代码:
<% using (Html.BeginForm())
{ %>
<table>
<tr>
<th>
Criteria:
</th>
<td>
<%= Html.TextBox("Criteria", "") %>
<%= Html.ValidationMessage("Criteria") %>
</td>
</tr>
</table>
<br />
<input type="submit" value="Submit" />
<%= Html.Hidden("IsInitialDisplay", false) %>
<% } %>

正如我所料,如果用户没有为 Criteria 输入任何值并单击提交按钮,则会显示验证错误消息。
但是在初始页面加载时总是显示验证错误消息,我不知道如何防止它?
有人知道吗?谢谢,

[更新]
我已经更新了我的 Action 方法,如下所示,它似乎很好:
public ActionResult Index(ReportModel model)
{
// Collecting some commons data here...

if (model.IsInitialDisplay)
{
ModelState.Clear();
}
else if (ModelState.IsValid)
{
model.Result = service.GetResult(model);
}
return View(model);
}

最佳答案

初始页面加载时显示错误消息的原因是您的 Controller 操作采用 ReportModel模型作为论据。当您第一次使用 /Home/Index 访问此操作时您没有传递任何参数,并且当默认模型绑定(bind)器尝试绑定(bind)到 ReportModel例如它会触发验证错误。

在渲染和处理表单提交时使用相同的操作是一种不好的做法,但如果你真的想这样做,你可以尝试这样:

public ActionResult Index(bool? isInitialDisplay)
{
if (isInitialDisplay.HasValue && !isInitialDisplay.Value)
{
var model = new ReportModel();
UpdateModel(model);
if (ModelState.IsValid)
{
model.Result = service.GetResult(model);
}
return View(model);
}

// Initial request
return View(new ReportModel());
}

在这种情况下,您不再需要 IsInitialDisplay模型上的属性或将其设置为 true 的构造函数。

话虽如此,这是推荐的方法:
public ActionResult Index()
{
var model = new ReportModel();
return View(model);
}

[HttpPost]
public ActionResult Index(ReportModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
model.Result = service.GetResult(model);
return View(model);
}

关于asp.net-mvc-2 - 页面加载时显示验证消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5347827/

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