【问题标题】:ASP.NET Core with form tag - validate form onsubmit and prevent submission带有表单标签的 ASP.NET Core - 在提交时验证表单并阻止提交
【发布时间】:2017-12-07 15:46:34
【问题描述】:

我有一个 ASP.NET Core 2.0 项目,我在其中使用表单标签进行提交。现在我想在我的表单提交中添加一些客户端验证。所以我在我的表单上使用onsubmit 标签:

<form id="formId" asp-action="ActionName" onsubmit="validationFunction(Event)">

我有这样的功能:

function validationFunction(e) {
    //CheckStuff
    e.preventDefault();
}

现在,当我提交表单时,该功能已正确触发,但 e.preventDefault() 不会停止提交。 return false 也没有。

如何阻止我的提交完成?

附言。我知道当我完成验证时,我可能可以通过单击按钮并提交我的表单来处理这种情况,但我想知道为什么上述方法在 ASP.NET Core 中不起作用或者我缺少什么?

【问题讨论】:

  • asp-action 定义了表单应该提交到的控制器动作,这与javascript函数无关。
  • @Jerodev 你说得对,当我写这个问题时,这是我的一个错误。我更正了。

标签: javascript c# asp.net-core-mvc form-submit asp.net-core-2.0


【解决方案1】:

应该返回onsubmit 属性和return false 以阻止提交。

<form id="formId" asp-action="ActionName" onsubmit="return validationFunction(Event)">

【讨论】:

  • 我不知道刚刚进入答案并否决所有内容的人是谁,但好吧我能说什么。感谢它有效的答案,我会接受它。
【解决方案2】:

如果你想做到“正确”且最简单的方法是在类 ex 中设置验证:

public class Movie
{
public int ID { get; set; }

[StringLength(60, MinimumLength = 3)]
[Required]
public string Title { get; set; }

[Display(Name = "Release Date")]
[DataType(DataType.Date)]
public DateTime ReleaseDate { get; set; }

[Range(1, 100)]
[DataType(DataType.Currency)]
public decimal Price { get; set; }

[RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
[Required]
[StringLength(30)]
public string Genre { get; set; }

[RegularExpression(@"^[A-Z]+[a-zA-Z''-'\s]*$")]
[StringLength(5)]
[Required]
public string Rating { get; set; }
}

https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/validation

或JavaScript 甚至HTML

【讨论】:

  • 这意味着 OP 正在使用 asp.net 提供的验证。 OP 显然是在编写自己的函数
  • 答案的方式不能用于我的案例,因为我想验证许多具有不同端点的类似表单,但我的模型是用于整个视图的模型。因此我不能真正设置数据注释验证。第二种方式是可行的,我知道,但我想知道为什么我的方式不可行。它应该可以工作,因为我要停止活动,但我错过了一些东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
  • 2016-07-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多