将数据从模态内的局部视图传递到主视图,然后关闭模态

时间:2016-04-22 19:43:49

标签: asp.net-mvc bootstrap-modal

我的 Index.cshtml 文件中有一个按钮,如下所示:

<button type="button" class="btn btn-default" data-toggle="modal" data-target="#myModal">
      Add Value                    
</button>  

单击按钮可打开模态窗口。我的模态在 Index.cshtml 文件中定义如下:

    <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <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 a Value</h4>
                </div>
                <div class="modal-body">
                    @(Html.Kendo().TabStrip()
                        .Name("tabstrip")
                        .Items(ts =>
                        {

                            ts.Add().Text("Pick a school").Selected(true).LoadContentFrom(Url.Action("SchoolPartial", "Institution"));                            
                        })
                     )
                </div>
            </div>
        </div>  

以下是我的部分外观( SchoolPartial.cshtml ):

<div class="col-md-12">

                @(Html.Kendo().Editor()
      .Name("schoolEditor")
      .Tag("div")
      .Tools(tools => tools
            .Clear()
            .Bold().Italic().Underline().Strikethrough()
            .JustifyLeft().JustifyCenter().JustifyRight().JustifyFull()
            .CreateLink().Unlink()
            .InsertImage()
            .TableEditing()
            .FontColor().BackColor()
      )
      .Value(@<text><p>
                <div class="container-fluid">    
                    <div class="row">
                        <div class="col-md-4">Senior School</div>
                    </div>
                </div>
            </p></text>))
</div>  

现在,用户点击了Index.cshtml文件中的&#39;添加值&#39; 按钮,&#39; myModal&#39; 窗口打开,在&#39; myModal&#39; 窗口中,选择一所学校&#39;选项卡,其中加载&#39; SchoolPartial&#39; 标签,我希望用户能够点击“高中”&#39; DIV。当用户点击 SchoolPartial.cshtml 中的高中div时,我希望将 id = 2 传递给我的 Index.cshtml ,然后这将会从数据库加载学校名称和地址详细信息,并将其显示在 Index.cshtml 中。

如何实现此行为。

谢谢!

编辑:

在我的SchoolPartial.cshtml中,为了使我的div可点击,我用下面的锚标记包围了我的div:

<a href="@Url.Action("RetrieveSchoolDetails", "School", new {schoolId= "2" })">
       <div class="col-md-4">senior school</div>
</a>  

这里School是我的控制器( SchoolController.cs ),而RetrieveSchoolDetails是动作方法。

这就是我定义RetrieveSchoolDetails方法的方法:

 public void RetrieveSchoolDetails (string schoolId= null)
        {
            var schoolDetail = db.School.Where(e => e.SchoolId== schoolId).ToList();
            string Address = Convert.ToString(schoolDetail .Select(e => e.Address));
           string Name = Convert.ToString(schoolDetail .Select(e => e.Name));
            string School= Name + Address;

            ViewBag.SchoolSelection = School;
        }

现在我想,一旦信息进入ViewBag,我想关闭模态窗口,以便选择和ViewBag信息显示在Index.cshtml中。
我不确定,如何从控制器关闭我的bootstrap模式,以便它显示Index.cshtml中的数据。
或者可能只是向我显示模态,用户可以手动关闭模态,以便ViewBag信息仍然存在。当我运行我的项目时,在为ViewBag赋值后,浏览器继续处理,我无法点击我的模态来关闭它。

请建议!

由于

编辑2:

我编辑了我的代码并使用,div点击调用javascript函数,然后使用ajax调用控制器的方法 - RetrieveSchoolDetails并从该控制器方法返回部分视图。

现在正在做的是,全屏返回学校地址的部分视图。也就是说,它将生成的学校地址重定向到我的部分视图。

但是我想关闭模态,然后在我的父页面(Index.cshtml)中显示部分视图。

以下是我的代码添加 -

div下面是SchoolPartial.cshtml

 <div onclick="GetAddress('2')" class="col-md-4">senior school</div>  

JavaScript函数

<script>
        function GetAddress(code)
        {                
                $.ajax({
                url: '/School/RetrieveSchoolDetails?schoolID=2',
                contentType: 'application/html; charset=utf-8',
                type: 'GET',
                dataType: 'html'

            })
            .success(function (result) {
                $('#npAddress').html(result);       //npAddress is id of my div inside   
                                            //Index.cshtml where I want to display the partial. 
                                           //Here I want to close the modal window 
                                           //and show Index.cshtml in it's filled state.
            })
            .error(function (xhr, status) {
                alert(status);
            })
        };

</script>  

以下是我的控制器方法:

public void RetrieveSchoolDetails (string schoolId= null)
            {
                var schoolDetail = db.School.Where(e => e.SchoolId== schoolId).ToList();
                string Address = Convert.ToString(schoolDetail .Select(e => e.Address));
               string Name = Convert.ToString(schoolDetail .Select(e => e.Name));
                string School= Name + Address;

                ViewBag.SchoolSelection = School;
                return PartialView("_schoolAddress");
            }

以下是我的_schoolAddress.chtml部分

@ViewBag.SchoolSelection

1 个答案:

答案 0 :(得分:0)

首先,你不需要在这里使用部分内容。使用partials的目的是在那里放置一些需要在多个地方(不同页面)重用的html代码。通过将其放在一个部分中,然后从多个页面调用该部分,可以使项目更容易维护(任何更改只需要进行一次)。但是,部分增加了一定程度的复杂性,不建议初学者使用。它们可以是强大的工具,但我们可以从基础开始,然后再努力。

其次,我不会在剃刀顶部使用任何其他插件(例如剑道)。使用它没有任何问题,但现在让它保持简单。另外,剃刀对它来说非常强大。

我为你编写了一些东西,但是你必须填补空白。

@model MyProject.Models.MyModel

<div class="">

<button type="button" class="btn btn-default" data-toggle="modal" onclick="AddValue()">
      Add Value                    
</button> 



</div>
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <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 a Value</h4>
            </div>
            <div class="modal-body">
                <!-- some tabs here? -->
                <!-- put code for tabs here, don't use a partial -->
                <div onclick="GetAddress(2)" class="col-md-4">senior school</div>
            </div>
        </div>
    </div>  
</div>
<script>

    function AddValue()
    {
        $('myModal').modal();

    }

    function GetAddress(id)
    {
        $.ajax(
        {
            url: '/School/RetrieveSchoolDetails?schoolID' + id,
            contentType: 'application/html; charset=utf-8',
            type: 'GET',
            contentType: 'application/json',            
            success: function (result) {                
                $('#npAddress').text(result);                                                   
            },
            error: function (xhr, status) {
                alert(status);
            }
        });

    }


</script>

在您的控制器中:

        public JsonResult RetrieveSchoolDetails (string schoolId)
        {
            // don't use a default null here unless you plan on handling it somehow
            // otherwise the next line would throw an error
            var schoolDetail = db.School.Where(e => e.SchoolId== schoolId).ToList();
            string Address = Convert.ToString(schoolDetail .Select(e => e.Address));
            string Name = Convert.ToString(schoolDetail .Select(e => e.Name));
            string School= Name + Address;
            // may need to format this depending on exactly what you want to return
            return Json(school);
        }

请记住,整体学习过程意味着从简单开始,然后构建到更复杂的过程。