gpt4 book ai didi

asp.net - 当 `HttpGet` 处理 `Create` 操作方法仅返回 `View()` 时,为什么浏览器上没有触发 JavaScript 验证?

转载 作者:行者123 更新时间:2023-12-02 16:48:30 26 4
gpt4 key购买 nike

HttpGet 处理 Create 操作方法仅返回 View() 时,会导致所有表单字段未初始化。

为什么当用户查看空白表单时,JavaScript 验证不会被触发?

最佳答案

我不太清楚内部运作原理,但我会猜测;-)

首先,它与它是 [HttpGet] 还是 [HttpPost] 无关——这只是它通常的工作方式。

您的平均 [HttpGet] 方法如下所示:

[HttpGet]
public ActionResult Index() {
// Get some data from the database
return View(data);
}

此方法中没有任何参数,因为我们希望用户在只需输入 URL(即 Home/Index)时即可点击此 Controller 。

您常用的[HttpPost]方法可能如下所示:

[HttpPost]
public ActionResult Create(MyModel myModel) {
if (ModelState.IsValid)
{
// Do stuff
}
else
{
return View(myModel);
}
}

我相信只有当您实际将表单值绑定(bind)到模型并点击 Create(...) Controller 时,验证属性才会被触发。如果您的 [HttpGet] 碰巧接受模型作为参数,那么验证也会在此时触发。

当您使用现有的无效模型返回 View 时,ValidationMessageFor(m => m.SomeProperty) 方法会以某种方式知道该属性的验证失败。这是我不确定的部分。

相比之下,当您返回一个新的 View() 作为 ActionResult(就像您通常对 HTTP GET 所做的那样)时,就会实例化一个全新的、 Shiny 的模型。创建新模型就像创建 POCO(普通旧 C# 对象)一样简单 - 不会触发验证。

至于客户端验证,一旦您单击表单的提交按钮,就完全通过 JavaScript 进行处理。当您的 [HttpGet] 请求显示空白表单时,尚未单击提交按钮(因此 JavaScript 验证尚未启动)。此外,我相信一旦您开始输入,验证也会通过各种 JavaScript 事件启动,例如 changekeydownkeypress 等。

关于asp.net - 当 `HttpGet` 处理 `Create` 操作方法仅返回 `View()` 时,为什么浏览器上没有触发 JavaScript 验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4495485/

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