【问题标题】:Best practice to show search result in a popup modal in ASP.NET MVC Core在 ASP.NET MVC Core 的弹出模式中显示搜索结果的最佳实践
【发布时间】:2020-10-09 03:00:48
【问题描述】:

我将一个值(搜索字符串)从表单传递到控制器操作方法,在该方法中我执行一些活动以从数据库中查找特定记录,然后将结果传递给 ViewBag 或模型以显示结果一个视图。

简单的方法是将结果作为模型(或视图模型)传递给视图..类似于:

1- 将字符串从表单传递给控制器​​。

2- 在控制器、方法中,执行搜索并将其保存到列表/var ..

返回视图(mymodel);

3-在视图中..我们可以说

@foreach(模型中的变量项) { ...表在这里显示列和数据..等。 }

问题是,我怎样才能在模式弹出窗口中显示结果而不是视图?

有很多不同的 JQuery 或 JavaScript 的建议,但有没有更简单的解决方案?

有没有类似(简单地)在弹出模式中显示视图的东西?

提前致谢

【问题讨论】:

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


    【解决方案1】:

    有没有类似(简单地)在弹出模式中显示视图的东西?

    我认为在模式弹出窗口中显示结果的最简单方法是使用 partial view 和 ajax

    在这里,您无法避免创建一个视图来存储需要在模式弹出窗口中显示的内容。当然,您只需要创建一个部分视图而不是视图。

    这是一个简单的演示供您参考:

    主视图:

    更新:

       @{
            ViewData["Title"] = "Testpop";
            Layout = "~/Views/Shared/_Layout.cshtml";
        }
        
        <h1>Testpop</h1>
        
        <form>
            <input id="Text1" type="text" />
            <button type="button" class="btn btn-info btn-lg" data-toggle="modal" data-target="#myModal" id="showPop">Open Modal</button>
        
            <!-- Modal -->
            <div class="modal fade" id="myModal" role="dialog">
                <div class="modal-dialog   modal-lg">
        
                    <!-- Modal content-->
                    <div class="modal-content">
                        <div class="modal-header">
                            <button type="button" class="close" data-dismiss="modal">&times;</button>
                            <h4 class="modal-title">Modal Header</h4>
                        </div>
                        <div class="modal-body ">
                            <div id="popup">
                            </div>
                        </div>
                        <div class="modal-footer">
                           <button type="button" class="btn btn-primary" data-dismiss="modal" id="submitModal">Submit</button>
                            <button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
                        </div>
                    </div>
        
                </div>
            </div>
        
        </form>
        
        @section Scripts{
            <script>
                $('#showPop').click(function () {
                     var url = '@Url.Action("GetPartialView", "Default")';
                    $.ajax({
                        url: url,
                        type: 'post',
                        data: { "para": $("#Text1").val()},
                        success: function (data) {
                            $('#popup').html(data);
                        }
                    });
                })
    
    $('#submitModal').click(function () {
                var url = '@Url.Action("GetData", "Default")';
                $.ajax({
                    url: url,
                    type: 'post',
                    data: { "data": $("input[name='data']").val() },
                    success: function () {
                        $("#Text1").val("");
                        alert("pass successfully!");
                       
                    }
                });
            });
            </script>
        }
    

    默认/GetPartialView 操作:

    [HttpPost]
            public IActionResult GetPartialView(string para)
            {
                 //get data
                var model = _context.Person.Where(x=>x.Name == para).ToList();
                return PartialView("_PopView",model);
            }
    

    _PopView.cshtml 局部视图:

        @model IEnumerable<Person>
        
        
        <table class="table table-bordered">
            <tr>
                <td>Id</td>
                <td>Name</td>
                <td>Nome_Tipo</td>
            </tr>
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @item.Id
                </td>
                <td>
                    @item.Name
                </td>
                <td>
                    @item.Nome_Tipo
                </td>
            </tr>
        }
        </table>
    <input id="data" type="text" name="data" />
    

    弹出提交数据到action:

    [HttpPost]
            public IActionResult GetData(string data)
            {
                //do anything.
                return Ok();
            }
    

    这是新的结果:

    【讨论】:

    • 完美..这正是我想要的..非常感谢
    • 亲爱的Yongqing Yu,如果在弹出模式中我有一个简单的表单,其中包含一个文本框和一个按钮,用于将文本框的值提交给控制器,方法来存储的内容表格中的文本框?我的意思是在显示的表格下方(在 ID 3 和关闭按钮之间)有一个简单的表格?我试图在局部视图中添加一个表单标签来定位控制器,但它不起作用
    • @user3208728,如果直接在局部视图中添加表单,是不行的。要实现你的功能,你应该把提交按钮放在主视图而不是部分视图的模态弹出中,并且你需要使用ajax将数据传递给js中的动作,我已经更新了我的回复,你可以参考它.
    • @user3208728,如果我的回复帮助您解决了您的问题,请采纳为答案,这将有助于其他有同样问题的人。
    • 非常抱歉..没有注意到..现在完成..再次感谢
    猜你喜欢
    • 2010-10-26
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-28
    • 2019-10-15
    • 1970-01-01
    相关资源
    最近更新 更多