asp.net - 当模型无效时,返回 View 内的部分 View ,并使用asp.net core 显示错误消息

标签 asp.net asp.net-mvc modal-dialog asp.net-ajax partial-views

我有一个模态助推器。我想在 boostrap 模态上显示验证错误。但是当我将模型留空并单击提交按钮时,它只是被视为一个独立的页面。

局部 View :

  @model WebApplication1.Models.Book

<form asp-controller="Home" asp-action="AddBook"
  data-ajax="true" data-ajax-method="POST" data-ajax-mode="replace" data-ajax-update="#frmaddbook">

<div class="modal-header">
    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
        <span aria-hidden="true">&times;</span>
    </button>
    <h4 class="modal-title" id="myModalLabel">Header of Modal</h4>
</div>

<div class="modal-body form-horizontal" id="frmaddbook  ">

    <span class="alert-danger">
        @Html.ValidationSummary()
    </span>

    <div class="row">
        <div class="form-group">
            <label asp-for="BookName" class="col-lg-3 col-sm-3 control-label"></label>
            <div class="col-lg-6">
                <input asp-for="BookName" class="form-control" />
                <span asp-validation-for="BookName" class="text-danger"></span>
            </div>
        </div>

        <div class="form-group">
            <label asp-for="BookDescription" class="col-lg-3 col-sm-3 control-label"></label>
            <div class="col-lg-6">
                <input asp-for="BookDescription" class="form-control" />
                <span asp-validation-for="BookDescription" class="text-danger"></span>
            </div>
        </div>
    </div>
</div>


<div class="modal-footer">
    <input type="submit" class="btn btn-primary" value="Submit" />
</div>

索引 View :

<div class="panel panel-primary">
<div class="panel-body">
    <div class="btn-group">
        <a class="btn btn-primary marginbutoon" id="showBookgroup" data-toggle="modal" asp-action="AddBook"
           data-target="#modal-book">
            <i class="glyphicon glyphicon-plus"></i>
            Add Book
        </a>
    </div>
</div>

我在索引 View 顶部使用这个库:

  1. jquery.unobtrusive-ajax.min.js
  2. jquery.validate.unobtrusive.min.js

并在索引 View 的底部使用:

  <script src="~/js/book-index.js"></script>

book-index.js:

(function ($) {
function Home() {
    var $this = this;

    function initilizeModel() {
        $("#modal-book").on('loaded.bs.modal', function (e) {

        }).on('hidden.bs.modal', function (e) {
            $(this).removeData('bs.modal');
        });
    }
    $this.init = function () {
        initilizeModel();
    }
}
$(function () {
    var self = new Home();
    self.init();
})

}(jQuery))

Controller :

     [HttpGet]
    public IActionResult AddBook()
    {
        var b = new Book();

        return PartialView("_AddBook", b);
    }



    [HttpPost]
    [ValidateAntiForgeryToken]
    //[HandleError]//not in core
    public IActionResult AddBook(Book model)
    {
        if (ModelState.IsValid)
        {
            return RedirectToAction("Index");
        }

        return PartialView("_AddBook", model);
    }

型号:

public class Book
{

    [Key]
    public int BookId { get; set; }

    [Display(Name = "Book Name :")]
    [Required(ErrorMessage = "Enter Book Name Please ")]
    public string BookName { get; set; }


    [Display(Name = "Book Description")]
    [Required(ErrorMessage = "Enter Book Description Please ")]

    public string BookDescription { get; set; }
}

我的代码如上所示。如何在模态局部 View 中显示验证错误?

最佳答案

您可以设置 Id 形式为 data-ajax-update表单的属性值,它是 ajax 化的。当从 ajax 调用接收到结果时,该值将用作 jQuery 选择器。

@model Book
<form asp-controller="Home" asp-action="AddBook" id="myform"
      data-ajax="true" data-ajax-method="POST"
                                 data-ajax-mode="replace" data-ajax-update="#myform">

    <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
            <span aria-hidden="true">&times;</span>
        </button>
        <h4 class="modal-title" id="myModalLabel">Add Book</h4>
    </div>

    <div class="modal-body form-horizontal" id="frmaddbook  ">

        <span class="alert-danger">
            @Html.ValidationSummary()
        </span>

        <div class="row">
            <div class="form-group">
                <label asp-for="BookName" class="col-sm-3 control-label"></label>
                <div class="col-lg-6">
                    <input asp-for="BookName" class="form-control" />
                    <span asp-validation-for="BookName" class="text-danger"></span>
                </div>
            </div>
        </div>
    </div>
    <div class="modal-footer">
        <input type="submit" class="btn btn-primary" value="Submit" />
    </div>
</form>

现在,当您提交表单并且模型状态验证失败时,操作方法代码将返回带有验证错误消息(由验证助手生成)和 jquery.unobtrusive-ajax.js 的部分 View 结果。库代码将替换(因为我们用 data-ajax-mode="replace" 指定了)jquery 选择器 #data-ajax-update 结果的内容(表单标签及其内部内容)以及从服务器返回的响应。

关于asp.net - 当模型无效时,返回 View 内的部分 View ,并使用asp.net core 显示错误消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47099687/

相关文章:

c# - 使用 jquery 缩放图像

c# - 如何将 "Forward"cookie 发送到另一个页面

c# - 从 C# .NET 调用 Node.js

asp.net-mvc - 为什么 Asp.Net MVC 不在我的共享目录中搜索 View ?

asp.net-mvc - 如何在 mvc 中将 formcollection 转换为模型

asp.net-mvc - 当使用许多 1 :Many or Many:Many tables? 时,存储库是什么样的

javascript - 单击按钮时飞入内容框?

c# - 与 ASP.NET 中的 obj 文件夹连接的 DLL 相关的 bin 文件夹中出现错误

objective-c - 如何在 Objective-C 中将模态背景颜色更改为透明

c# - 使用 MSHTML/IExplorer 捕获模态对话框对象