【问题标题】:How to fully reset/clear ASP.NET Core MVC form using JavaScript?如何使用 JavaScript 完全重置/清除 ASP.NET Core MVC 表单?
【发布时间】:2020-10-12 21:28:44
【问题描述】:

我需要使用 JS(或 jQuery)来重置表单。如果填写字段并单击重置,它会正常工作。当我提交至少有一个字段存在模型错误的表单时,问题就开始了。当返回带有模型错误的表单并单击重置时,没有模型错误的字段不会重置。

这里发生了什么?如何让所有字段始终重置,无论是否存在任何模型错误?此外,我希望模型错误在重置时也消失。

下面的 Gif 显示了我突出显示的字段未重置:

HTML

@model SampleViewModel
@{
    ViewData["Title"] = "Home Page";
}


<script>
    function ResetFormWithJS() {
        document.getElementById('FormEyeDee').reset();
    }
</script>

<center>
    <form id="FormEyeDee"asp-action="Index" method="post">
        Name:
        <input asp-for="Name" />
        <span asp-validation-for="Name" class="text-danger"></span>
        <hr />
        Email:
        <input asp-for="Email" />
        <span asp-validation-for="Email" class="text-danger"></span>
        <hr />
        <input type="submit" value="Submit" />
        <input type="reset" onclick="ResetFormWithJS();" />
    </form>
    <br>
</center>

控制器:

public class HomeController : Controller
{
    [HttpGet]
    public IActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public IActionResult Index(SampleViewModel Model)
    {
        if (!ModelState.IsValid)
        {
            return View("Index", Model);
        }

        return RedirectToAction("Index");
    }
}

型号

public class SampleViewModel
{
    [Required]
    public string Name { get; set; }
    [Required]
    public string Email { get; set; }
}

【问题讨论】:

    标签: javascript html asp.net-mvc asp.net-core


    【解决方案1】:

    这里发生了什么?如何让所有字段始终重置,无论是否存在任何模型错误?此外,我希望模型错误在重置时也消失。

    为达到要求,您可以尝试引用_ValidationScriptsPartial.cshtml 来支持客户端验证,这也有助于避免不必要的服务器往返。

    @section Scripts {
        <partial name="_ValidationScriptsPartial" />
    }
    

    测试结果

    【讨论】:

    • 我应该让我的测试用例对我正在开发的应用程序更准确,因为我实际上并没有在我的模型属性上使用数据注释。我打电话给服务器来验证表单,因为它有额外的复杂性,所以我认为 _ValidationScriptsPartial 对我的应用程序没有帮助。但是看到您的回答回答了我发布的问题,我会接受。谢谢!
    【解决方案2】:

    如果您正在寻找纯 JavaScript 解决方案,试试这个:

    function ResetFormWithJS() {
        document.querySelector("[asp-for='Name']").value = "";
        document.querySelector("[asp-for='Email']").value = "";
    }
    

    或者使用 JQuery:

    function ResetFormWithJS() {
        $("[asp-for='Name']").val("");
        $("[asp-for='Email']").val("");
    }
    

    【讨论】:

    • 感谢您的回复,但这实际上不起作用,因为在 ASP.NET Core 中,asp-for 是一个标签助手,可在 DOM 中呈现标签的属性。因此,当页面加载时,asp-for 标签消失了。但是,它呈现的标签之一是 nameasp-for 可以在您的代码中替换。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多