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

标签 asp.net asp.net-mvc-3

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/

相关文章:

jquery - MVC 3 Controller 操作不接受来自 JQuery .POST 的值

active-directory - 我可以模拟通过表单例份验证的客户端并建立与 SQL Server 的受信任连接吗?

ASP.net 转发器显示正确格式的图像和文本

asp.net - 强制 Visual Studio 因 ASP.Net 的 aspx/ascx 页面中的语法错误而编译失败?

asp.net - 在 Visual Studio 中手动安装 Bootstrap

asp.net-mvc-3 - 在 MVC3 中设置选定的选项

asp.net - 从下拉列表中选择 "Other"选项时如何验证所需的文本?

javascript - 在 asp.net web 表单中单击按钮时避免回发

ASP.NET MVC : Correct location for custom classes, 属性等

c# - ASP.NET MVC 3 Razor 递归函数