asp.net-mvc - 在同一模式对话框中验证表单发布

标签 asp.net-mvc dialog validation

我已经尝试使用 mvc 表单和 jquery 几天了,发现了一些有趣的结果。

我有一个在 View 中上传文件的表单。提交表单后,我使用模型验证来确保文件不为空,它是允许的类型等。如果模型验证失败,我可以将模型返回到 View (同一 View ),并显示错误在验证摘要中非常好。这是我的代码:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

   @using (Html.BeginForm("TestView", "TestController", FormMethod.Post, new { enctype = "multipart/form-data",  @id = "ImportFile"}))
    {    @Html.ValidationSummary(false, "")

        <span id="instructions">Select a File to Import:</span><br />           
        @Html.TextBoxFor(model => Model.UploadedFile, new { style = "width:275px;", type = "file", @id = "UploadedFile", @name = "UploadedFile" })
                @Html.ValidationMessageFor(model => Model.UploadedFile)
        <span style="font-size: 8pt">@Html.CheckBoxFor(model => Model.HeadersIncluded)
            First Column Includes Headers?</span>
        <p style="margin-bottom: 7px;">
            <input type="submit" name="launchbutton" value="Continue" class="InnerButton"/></p>
    } 
<div id="UploadPartial"></div>

还有我的 Controller 方法:

    [AcceptVerbs("GET")]
    public ActionResult TestView()
    {
        TestViewModel testModel = new TestViewModel();
        testModel.HeadersIncluded = true;
        return View(testModel);
    }

    [AcceptVerbs("POST")]
    public ActionResult TestView(TestViewModel model)
    {
        if (!ModelState.IsValid)
        {
             return View(model);
       }
        else
        {
             return View(model);
        }
    }

有了它,一切都很好,如果模型有效,原始表单不受干扰(验证错误除外),我已经能够使用 jquery 将部分 View 加载到同一页面像这样发布:

$(document).ready(function () {
    $('#UploadPartial').load('@Url.Content("~/TestController/TestView2")', function() {
    });     

换句话说,如果模型有效,则加载另一个额外的分部 View 。

然后我想知道,我可以在模式对话框中执行此操作吗?换句话说,我能否在模态对话框中打开表单,提交它,执行模型验证,然后将结果返回到模态对话框。 . .

发生的事情是,当模型被验证时,结果被回传到一个空白页面。没有布局,没有脚本文件,只有一个包含表单的空白页面(如果存在验证错误)。我尝试返回 View、PartialView、修改 View 的布局、添加必要的脚本文件等。我使用相同的表单代码(但在对话框中),提交后,我可以看到模型验证确实发生了,如果模型验证成功与否,我只想将相同的 View 或 PartialView 返回到相同的对话框,其中包含验证错误或附加信息(在模型中),以便我可以继续下一步(将加载另一个 View )。这是我的 Controller 代码:

    [AcceptVerbs("GET")]
    public ActionResult TestView()
    {
        TestViewModel testModel = new TestViewModel();
        testModel.HeadersIncluded = true;
        return PartialView(testModel);
    }

    [AcceptVerbs("POST")]
    public ActionResult TestView(TestViewModel model)
    {
        if (!ModelState.IsValid)
        {
            return PartialView("TestView", model);

        }
        else
        {
             return PartialView(model);
        }
    }

我试过返回 PartialView、View,将 ActionResult 更改为 PartialViewResult,但我无法将现在的局部 View 返回到表单所在的模态对话框。局部 View 正在返回,但只是返回到没有格式的空白页面,而不是我想要的模态对话框。模态对话框似乎消失了,所有的网站格式都用它。

所以我的问题是,这可能吗?您能否在模态对话框中提交表单,并将该表单提交的结果返回到同一对话框(在执行模型验证后),并且仍然具有站点的格式以及处理进一步 jquery 所需的必要脚本文件.

谢谢,如果您需要任何其他信息,请告诉我。

最佳答案

我通常在我的对话框 div 中有一个内容 div,并让 jQuery 从局部 View 填充内容 div。

您还可以使用 Ajax.BeginForm 帮助程序并将 UpdateTargetId 设置为内容 div。

当您的表单位于 jQuery 对话框中时,另一个障碍是您必须在通过 Ajax 更新内容后重新触发验证。就像是 $.validator.unobtrusive.parse("表单");

关于asp.net-mvc - 在同一模式对话框中验证表单发布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12557616/

相关文章:

jquery - Controller 的 Ajax 数据参数始终为空

c# - MVC 路由 .net 核心

asp.net - azure 部署问题:do not have permission to view this directory or page

apache-flex - flex 中的必填字段

c# - 用于验证字母数字字符串长度的正则表达式

javascript表单验证刷新页面

asp.net-mvc - __RequestVerificationToken 并不总是被创建

validation - 在 p :dialog on validation failure 中自动显示验证消息

jquery-ui - 设置对话框覆盖 Jquery

android - ProgressDialog 给出错误,而我在 Activity 组中的 Activity 的 onCreate() 中使用