在 MVC 4 中的另一个表单中验证 JQuery UI 模式表单

2024-05-22

我在 MVC 4 中有一个表单,其中包含多个字段,根据组合的值,我需要打开一个模式对话框表单并加载到这 3 个附加字段中,这些字段将影响我正在创建的同一实体/在主窗体中进行编辑。 对于这个模式对话框,我使用的是 jQuery UI 中的对话框。

现在,我需要做的是验证(必需)模式对话框中的字段,以便允许用户保留输入的值,这些值稍后将由主表单提交。

我的问题是如何从模式表单中执行这 3 个字段的验证(因为在对话框关闭之前它们无法提交主表单)。

有什么提示或想法吗?

问候, 塞萨尔.


您可以使用 AJAX 将表单模式提交到服务器。模态表单当然会有一个与之关联的单独的视图模型。我们来举例说明:

主视图模型:

public class MyViewModel
{
    [DisplayName("select a value")]
    public string SelectedValue { get; set; }
    public IEnumerable<SelectListItem> Values { get; set; }
    public string SomeOtherProperty { get; set; }
}

模态对话框视图模型:

public class DialogViewModel
{
    [Required]
    public string Prop1 { get; set; }
    [Required]
    public string Prop2 { get; set; }
    [Required]
    public string Prop3 { get; set; }
}

然后你可以有一个包含 4 个操作的控制器:

public class HomeController : Controller
{
    // Renders the main form
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            Values = new[]
            {
                new SelectListItem { Value = "1", Text = "item 1" },
                new SelectListItem { Value = "2", Text = "item 2" },
                new SelectListItem { Value = "3", Text = "item 3" },
            }
        };
        return View(model);
    }

    // Processes the submission of the main form
    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return Content(
            string.Format(
                "Thanks for filling out the form. You selected value: \"{0}\" and other property: \"{1}\"",
                model.SelectedValue,
                model.SomeOtherProperty
            )
        );
    }

    // Renders the partial view which will be shown in a modal
    public ActionResult Modal(string selectedValue)
    {
        var model = new DialogViewModel
        {
            Prop1 = selectedValue
        };
        return PartialView(model);
    }

    // Processes the submission of the modal
    [HttpPost]
    public ActionResult Modal(DialogViewModel model)
    {
        if (ModelState.IsValid)
        {
            // validation of the modal view model succeeded =>
            // we return a JSON result containing some precalculated value
            return Json(new
            {
                value = string.Format("{0} - {1} - {2}", model.Prop1, model.Prop2, model.Prop3)
            });
        }

        // Validation failed => we need to redisplay the modal form
        // and give the user the possibility to fix his errors
        return PartialView(model);
    }
}

接下来你可以有一个主视图(~/Views/Home/Index.cshtml):

@model MyViewModel

@using (Html.BeginForm())
{
    <div>
        @Html.LabelFor(x => x.SelectedValue)
        @Html.DropDownListFor(x => x.SelectedValue, Model.Values, new { id = "ddl" })
    </div>
    <div>
        @Html.LabelFor(x => x.SomeOtherProperty)
        @Html.TextBoxFor(x => x.SomeOtherProperty, new { id = "otherProperty" })
        @Html.ActionLink(
            "click here to open a modal and help you fill the value",
            "Modal",
            "Home",
            null,
            new { id = "showModal" }
        )
    </div>
    <button type="submit">OK</button>
}

<div id="modal"></div>

以及包含模态形式的部分视图 (~/Views/Home/Modal.cshtml):

@model DialogViewModel

@using (Ajax.BeginForm(new AjaxOptions { OnSuccess = "handleModalSubmit" }))
{
    <div>
        @Html.LabelFor(x => x.Prop1)
        @Html.EditorFor(x => x.Prop1)
        @Html.ValidationMessageFor(x => x.Prop1)
    </div>
    <div>
        @Html.LabelFor(x => x.Prop2)
        @Html.EditorFor(x => x.Prop2)
        @Html.ValidationMessageFor(x => x.Prop2)
    </div>
    <div>
        @Html.LabelFor(x => x.Prop3)
        @Html.EditorFor(x => x.Prop3)
        @Html.ValidationMessageFor(x => x.Prop3)
    </div>
    <button type="submit">OK</button>
}

好的,现在剩下的就是编写一些 JavaScript 来让整个事情变得生动起来。首先,我们首先确保已包含所有必需的脚本:

<script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.20.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

然后编写我们自己的:

$(function () {
    $('#showModal').click(function () {
        $.ajax({
            url: this.href,
            type: 'GET',
            cache: false,
            data: { selectedValue: $('#ddl').val() },
            success: function (result) {
                $('#modal').html(result).dialog('open');
            }
        });
        return false;
    });

    $('#modal').dialog({
        autoOpen: false,
        modal: true
    });
});

function handleModalSubmit(result) {
    if (result.value) {
        // JSON returned => validation succeeded => 
        // close the modal and update some property on the main form
        $('#modal').dialog('close');
        $('#otherProperty').val(result.value);
    } else {
        // validation failed => refresh the modal to display the errors
        $('#modal').html(result);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 MVC 4 中的另一个表单中验证 JQuery UI 模式表单 的相关文章

  • 使用 AJAX 加载部分视图不起作用

    请原谅我 我是 MVC 和 AJAX 的新手 目前我只是提交一个表单 我想使用表单中的数据使用 ajax 更新部分视图中的表 My UserInfo部分视图如下所示 model IEnumerable
  • 构建 ViewModel 的合适粒度是多少?

    我正在开发一个新项目 在看到以前项目的一些困难后 这些项目没有提供足够的视图与模型的分离 特别是使用 MVC 模型和视图开始有点相互渗透 我想使用 MVVM 我了解基本概念 并且很高兴开始使用它 然而 有一件事我有点忽略 ViewModel
  • 临时目录中自动生成的“App_Web********.cs”文件导致构建错误

    因此 这已经困扰我一段时间了 但有时在我的 Visual Studio 2013 ASP NET MVC4 项目中 我会删除未使用的 ViewModel 类 并在下一次编译时收到如下错误 对于名为 我刚刚删除的 MostRecentMemb
  • JQuery UI Selectable 插件:当 div 溢出时使滚动条不可选择

    我有一个 div 设置为overflow auto 该 div 的内容是可选择的 使用 jQuery UI 当 div 溢出并出现滚动条时 滚动条本身变为可选择状态 因此滚动效果不佳 在 FF Chrome 中 我可以滚动 div 但我得到
  • jqueryui tabs:当内容垂直滚动时是否可以保持导航选项卡可见?

    我的 jqueryui 选项卡集由几页相当长的内容组成 用户必须垂直滚动才能浏览每个文档 这是一个简化版本 MAIN TEXT END NOTES blah blah blah lots more text the end 如果用户正在阅读
  • 如何强制 Visual Studio 2008 生成 Designer.cs,例如不管怎样.aspx.designer.cs

    我在使用 Visual Studio 2005 使用网站技术生成的 Asp Net V2 0 中有一些 Web 表单 想要将它们导入到设置为 v3 5 Asp Net MVC 的 Visual Studio 2008 我在其中使用项目技术
  • 覆盖 jQuery 验证 MVC4 中的默认设置

    要覆盖查询验证插件 请在文件 http docs jquery com Plugins Validation validate toptions 推荐的方式是 selector validate invalidHandler functio
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供
  • jQuery Dialog 和 Datepicker 插件出现问题

    我有一个对话框 对话框上有一个日期选择器字段 当我打开对话框并单击日期选择器字段时 日期选择器面板显示在对话框后面 我尝试了更多属性 z索引 堆栈 大框架 但没有成功 有人可以帮助我吗 Tks 旧答案 z index 注意连字符 是重要的属
  • 无法将 MVC 4 部署到服务器

    我的 Web 应用程序只是一个用 VS 2010 MVC 4 制作的简单 Web 应用程序 没有任何外部代码 它只是 VS 2010 的默认应用程序 我有 Plesk 的豪华 Windows 托管 我从未更改过帐户中的任何功能 我将所有文件
  • ASP.NET MVC:这个业务逻辑应该放在哪里?

    我正在开发我的第一个真正的 MVC 应用程序 并尝试遵循一般的 OOP 最佳实践 我正在将控制器中的一些简单业务逻辑重构到我的域模型中 我最近一直在阅读一些内容 很明显我应该将逻辑放在域模型实体类中的某个位置 以避免出现 贫血域模型 反模式
  • 良好的 WiX 编辑器 [重复]

    这个问题在这里已经有答案了 我目前正在开发一个使用 WiX 创建 MSI 的项目 我过去在 Sourceforge 上使用 WiXEdit 来管理包含在 WiX 项目中的文件 因为它比直接操作 XML 稍微容易一些 但它仍然有点笨重 有谁知
  • 包含 ASP.Net Identity 2.0 UserManager.Users.ToListAsync 和 UserManager.FindByIdAsync 上的属性

    我正在尝试实现 Asp Net Identity 2 0 到目前为止 在以下人员的帮助下我做得很好这个博客 http typecastexception com post 2014 06 22 ASPNET Identity 20 Cust
  • 获取当前操作和控制器并将其用作 Html.ActionLink 中的变量?

    我需要能够动态检索您所在页面的当前操作和控制器名称 并实际使用它们创建一个新的 HTML ActionLink 链接到相同的操作和控制器名称 但位于不同的区域 所以我想我需要检索当前操作和控制器名称作为变量以用于构建新的 HTML Acti
  • Draggable 正在阻止触摸事件

    我正在尝试使用拖动来来回移动 div 这部分工作正常 直到 div 具有可滚动内容 由于滚动条 这在桌面上不是问题 但在触摸设备上会出现问题 由于触摸事件与拖动事件冲突 我无法滚动内容 我尝试创建一个条件来检测拖动是否水平方向多于垂直方向
  • 如何从 asp.net MVC 4 应用程序中的 FileResult 方法返回错误消息?

    我在 asp net mvc4 中有一个 fileresult 方法 它返回 Excel 文件中的报告 现在 如果不满足我的条件 我如何从该方法返回错误消息 既然我们只能从这个方法返回一个文件 谢谢 您可以将操作方法 的签名更改为publi
  • 过滤文件上传仅用于文本文件

    我使用的是 Firefox 版本 14 0 1 我需要过滤上传文件窗口以仅显示 txt files 我的浏览器不仅仅支持文本文件 text plain 我可以通过指定此格式来限制图像文件 image 但我只需要过滤文本文件在文件选择器窗口中
  • jQuery DatePicker 在可滚动 div 中时不随 HTML 内容移动

    我的表单大小受到限制 并且溢出样式设置为滚动 该表单包含许多 DatePickers 如果我打开其中一个 DatePicker 然后滚动面板 使用滚轮将焦点保持在 DatePicker 上 使其保持打开状态 DatePicker 不会随其附
  • 带有 jQ​​uery 日期选择器 OnTextChanged 的​​文本框未触发

    我有一个带有 OnTextChanged 事件的 asp textbox 当从绑定到它的 jQuery 日期选择器中选择新日期时 我想触发该事件 但在选择日期时 OnTextChanged 永远不会触发 如果我 手动 更改文本 它会触发 但
  • 将自定义参数传递给 ValidationAttribute

    我构建了一个自定义 ValidationAttribute 以便可以验证系统中的唯一电子邮件地址 但是 我想以某种方式传递自定义参数 以便为我的验证添加更多逻辑 public class UniqueEmailAttribute Valid

随机推荐

  • Xcode 6 Bug:Interface Builder 文件中的未知类

    我升级到 Xcode 6 beta 4 现在我的应用程序不断崩溃并显示以下消息 Interface Builder 文件中存在未知的类 X 它崩溃是因为据说 Xcode 找不到我在故事板中链接的自定义类 但它显示它们在 Xcode 界面中正
  • 如何在 Hibernate 拦截器中获取 Hibernate 会话?

    如何在 Hibernate 拦截器中获取 Hibernate 会话 我正在尝试使用 Hibernate 透明地强制按组织 ID 进行数据访问 我设置了一个全局过滤器来按组织 ID 过滤所有查询 现在 我需要在保存 更新之前使用实体拦截器在所
  • 如何使用 Java 在 RabbitMQ 中实现标头交换?

    我是一个新手 试图在java客户端中实现标头交换 我知道这就是 x match 绑定参数的用途 当 x match 参数设置为 any 时 只需一个匹配的标头值就足够了 或者 将 x match 设置为 all 强制所有值必须匹配 但任何人
  • 在三角域内生成随机位置

    我想生成x and y具有均匀分布且受限于 xmin xmax and ymin ymax 点 x y 应位于三角形内 我该如何解决这样的问题 下面是一些在平面中的任意三角形上均匀生成点的代码 import random def point
  • 如何在 PostgreSQL 9.5 中执行 INSERT INTO SELECT 和 ON DUPLICATE UPDATE?

    我正在尝试在 PostgreSQL 中执行以下操作 INSERT INTO blog sums blog id date total comments SELECT blog id 2016 09 22 count comment id a
  • iPhone 中的表视图属性

    如何更改iPhone中tableview中每行文本的颜色 有人知道吗 那么请给我指导 提前致谢 基本上你需要做的是以下内容tableView CellForRowAtIndexPath method cell textLabel textC
  • 将十进制值转换为十六进制值

    我编写了 C 代码来从十进制转换为十六进制 但我编译了该代码 它仅显示 10 到 15 的十六进制值 这意味着 A 到 F 请参阅下面的代码 main int n r 10 i d 0 e 1 printf Enter the decima
  • 除了用户名/密码之外的安全性?

    我有一个 Web 应用程序 其安全性要求高于普通 Web 应用程序 当任何用户访问域名时 他们都会看到两个文本字段 一个用户名字段和一个密码字段 如果他们输入有效的用户 密码 他们就可以访问 Web 应用程序 标准的东西 但是 我正在寻找超
  • Oracle 存储过程的全局临时表的替代方法

    我已阅读并理解 Oracle 仅使用全局临时表 这与允许 temp 表的 MS SQL 不同 我遇到的情况需要我创建数百个全局临时表 以完成我正在进行的从 MS SQL 到 Oracle 的数据库转换 我想知道除了创建必须在数据库中维护的所
  • 将 CURL 命令行转换为 VBA

    在 CURL 中 我可以使用这一行 curl data DataToBeSent https example com resource cgi 我正在努力将此类行转换为在 VBA 中使用 这是我到目前为止的尝试 Sub POST Metho
  • Blazor WeatherForecast 示例如何工作?

    Blazor 的 Hello World 项目模板包括天气预报示例 除了计数器增量示例之外 我用这个来看看幕后发生了什么 我似乎无法弄清楚 基本上 如果我注释掉获取天气 json 数据的代码行 那么我会无限期地看到 正在加载 到目前为止是有
  • 在泛型类中创建泛型方法名称?

    目前 我有这样的事情 public class MyHolder
  • 创建 matplotlib 注释后如何移动它们?

    我有以下代码来使用生成箭头ax annotate import numpy as np import matplotlib pyplot as plt fig ax plt subplots t np arange 0 0 5 0 0 01
  • 如何在VBA中将文本文件读取到数组中

    我正在尝试将制表符分隔的文本文件提取到数组中 我已经知道如何将该文本文件读入电子表格中 以下是我的代码 它运行良好 While Not EOF iFile Line Input iFile LineText Dim arr arr Spli
  • MVC3 Controller 文件夹不会出现在 URL 中

    这只是一个例子 我不知道如何让它工作 在我的 MVC3 控制器文件夹中 如果我添加一个名为 Admin 的新文件夹 并添加一个带有操作 Index 的控制器 News 则当您尝试打开该 url 404 时 您会收到服务器错误 http ur
  • Eclipse 中的“自动插入通用前缀”有什么作用?

    我一直在寻找一种改进 Eclipse 中自动完成功能的方法 并且在首选项窗口的 Java gt 编辑器 gt 内容辅助部分中发现了此首选项设置 自动插入公共前缀 我想知道它有什么作用 因为我没有感觉到任何区别 帮助说 如果启用 代码辅助将自
  • 将文件从 Dropbox 下载到服务器

    我想从 Dropbox 下载文件 并需要代表 Dropbox 用户将其保留在我的服务器中 我尝试使用curl 和file get contents 但未能成功 我需要使用 dropbox 的任何 api 方法吗 我可以从浏览器下载该文件 但
  • 如何在Windows的node js中设置默认时区

    我正在尝试在应用程序启动时设置时区 set TZ UTC node main js 但这不起作用 main js var tz process env TZ var date new Date console log tz date UTC
  • DWR 如何转换传入数据并避免类型擦除

    我想请求一个集合的项目类 某种特定的反映 但是关于类型擦除似乎是不可能的 而且关于我在堆栈上读到的一些主题也是如此 有一些解决方法 here https stackoverflow com questions 8452893 avoidin
  • 在 MVC 4 中的另一个表单中验证 JQuery UI 模式表单

    我在 MVC 4 中有一个表单 其中包含多个字段 根据组合的值 我需要打开一个模式对话框表单并加载到这 3 个附加字段中 这些字段将影响我正在创建的同一实体 在主窗体中进行编辑 对于这个模式对话框 我使用的是 jQuery UI 中的对话框