【问题标题】:How do I redirect from an MVC Post Action back to the bootstrap popup modal partial view where the post came from?如何从 MVC 帖子操作重定向回帖子来自的引导弹出模式部分视图?
【发布时间】:2017-03-15 15:43:22
【问题描述】:

如何从 MVC 帖子操作重定向回帖子来自的引导弹出模式部分视图?

这是位于页面上 Bootstrap 模式弹出窗口中的 PartialView。 它有一个带有验证 taghelper 的 div,等待任何模型错误。

@model CreateRoleViewModel

<div class="panel panel-primary partialModalFormDivs">
    @Html.Partial("_ModalHeader",
        new ModalHeader
        {
            Heading = "ADD ROLE",
            glyphiconClass = "glyphicon glyphicon-random"
        }
    )

    <div class="panel-body">
        <div asp-validation-summary="All" class="text-danger"></div>
        <form asp-action="CreateRole" method="post">
            <div class="form-group">
                <label asp-for="RoleName"></label>
                <input asp-for="RoleName" class="form form-control" />
            </div>
            <div class="modal-footer">
                <button type="submit" class="btn btn-primary">Create</button>
               <a asp-action="Index" class="btn btn-default">Cancel</a>
            </div>
        </form>
    </div>
</div>

它发布到此操作:

    [HttpPost]
    public async Task<IActionResult> CreateRole(CreateRoleViewModel createRoleViewModel)
    {
        if (ModelState.IsValid)
        {
            IdentityRole role = new IdentityRole(createRoleViewModel.RoleName);

            IdentityResult result
                = await _roleManager.CreateAsync(role);

            if (result.Succeeded)
            {
                return RedirectToAction("Index");
            }
            else
            {
                foreach (IdentityError error in result.Errors)
                {
                    ModelState.AddModelError("", error.Description);
                }
            }
        }
        return View(createRoleViewModel);
    }

我可以在最后返回一个像这样的 PartialView:

return View("_CreateRole", createRoleViewModel);

但随后整个页面被清除,并且此部分返回没有布局文件。

如何将结果返回到模态弹出窗口。 我了解问题和当前行为。但是其他人解决了这个问题吗?

【问题讨论】:

    标签: asp.net-mvc asp.net-core bootstrap-modal


    【解决方案1】:

    我认为您想要做的是一个 ajax 帖子,然后只返回一个部分视图并替换表单。表单应该在一个容器 div 中,其 id 用于将其内容替换为 ajax 发布结果。为此,您需要包含 jquery unobtrusive ajax 脚本,该脚本将根据表单上的 data-* 属性自动连接 ajax,如下所示

    <div class="panel-body">
        <div asp-validation-summary="All" class="text-danger"></div>
        <div id="resultcontainer">
            <form asp-action="CreateRole" method="post"
            data-ajax="true" 
            data-ajax-method="POST" 
            data-ajax-mode="replace" 
            data-ajax-update="#resultcontainer"
            >
                <div class="form-group">
                    <label asp-for="RoleName"></label>
                    <input asp-for="RoleName" class="form form-control" />
                </div>
                <div class="modal-footer">
                    <button type="submit" class="btn btn-primary">Create</button>
                   <a asp-action="Index" class="btn btn-default">Cancel</a>
                </div>
            </form>
        </div>
    </div>
    

    别忘了返回部分视图

    return PartialView(createRoleViewModel);
    

    【讨论】:

    • 不,这行不通。如果成功,则应返回完整索引页面。如果有错误,我想在索引页面的模式弹出窗口中显示模型错误。
    • 它会起作用,但您需要将表单本身放在另一个从主视图引用的局部视图中,然后 post 方法仅返回该部分,仅替换表单。模态框内的重定向只能使用 iframe,ajax 解决方案可以工作并且不需要 iframe
    猜你喜欢
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 2018-02-01
    相关资源
    最近更新 更多