如何使用 <div> ajax 用分部视图填充空


使用ajax的局部视图。

我使用的是Visual Studio 2013, . net 4.5, MVC和Visual Basic。我试图在使用jQuery和Ajax的另一个视图的空div中呈现部分视图。我的脚本在下拉列表更改上成功运行,我的部分视图被渲染,但不是在同一视图上的div中渲染,而是在自己的页面上渲染。

主要观点:

<div class="col-md-8">
            <div class="btn-group">
                <button class="btn btn-default dropdown-toggle btn-sm" type="button" id="dropDownSelectBuilding" data-toggle="dropdown" 
                        aria-expanded="true">
                    <span class="selection"></span>
                    <span class="caret"></span>
                </button>
                <ul class="dropdown-menu" role="menu" aria-labeledby="dropDownSelectBuilding">
                    @For Each item In Model
                        Dim currentItem = item
                        @<li role="presentation"><a role="menuitem" tabindex="-1" href="/LocationSelect/SelectFloor"
                                                    >@Html.DisplayFor(Function(modelItem) currentItem)</a></li>
                    Next
                </ul>
            </div>
            @section Scripts
                <script>
                    $('#dropDownSelectBuilding').onChange(function () {
                        $.ajax({
                            url: '/LocationSelect/SelectFloor',
                            contentType: 'application/html; charset=utf-8',
                            type: 'GET',
                            dataType: 'html'
                        })
                        .success(function (result) {
                            $('#showFloors').html(result);
                        })
                        .error(function (xhr, status) {
                            alert(status);
                        })
                    });
                </script>
                End Section
        </div>
    </div>
    <div class="row" id="showFloors">
    </div>
部分观点:

    <div class="col-md-4">
        <label>*Select the floor this item will move to:</label>
    </div>
    <div class="col-md-8">
        <div class="btn-group">
            <button class="btn btn-default dropdown-toggle btn-sm" type="button" id="dropDownSelectFloorMoveTo" data-toggle="dropdown" aria-expanded="true">
                <span class="selection"></span>
                <span class="caret"></span>
            </button>
            <ul class="dropdown-menu" role="menu" aria-labeledby="dropDownSelectFloorMoveTo">
                @For Each item In Model
                    Dim currentItem = item
                    @<li role="presentation"><a role="menuitem" tabindex="-1" href="/LocationSelect/SelectFloor"
                                                >@Html.DisplayFor(Function(modelItem) currentItem)</a>
                    </li>
                Next
            </ul>
        </div>
    </div>

控制器:

Public Class LocationSelectController
    Inherits Controller
    Private db As New MCSCInventoryModels
    ' GET: LocationSelect
    Function Index() As ActionResult
        Dim distinctBuildings = From Row In db.tblLocations
                                Select Row.Building
                                Distinct
        Return View(distinctBuildings)
    End Function
    ' GET: FloorS
    Function SelectFloor(ByVal selectedBuilding As String) As PartialViewResult
        Dim floorsInSelectedBuilding = From Row In db.tblLocations
                                       Where Row.Building = selectedBuilding
                                       Select Row.Floor
                                       Distinct
        Return PartialView(floorsInSelectedBuilding)
    End Function
End Class

你能告诉我为什么这个ajax调用在它自己的页面中打开部分视图,而不是在指定的div中渲染它?

Update我已经检查了这两个问题的公认答案,他们没有解决问题。在这里和

你很可能在你的布局页面中错过了不显眼的脚本。

<script src="/Scripts/jquery.unobtrusive-ajax.js"></script>

参考这个问题:

为什么局部视图显示为完整的页面在MVC 5 Visual Studio 13?

还有一件事是添加最后一行(UnobtrusiveJavaScriptEnabled)到你的配置文件(Web.Config):

<configuration>
    <appSettings>
        <add key="webpages:Version" value="2.0.0.0"/>
        <add key="webpages:Enabled" value="false"/>
        <add key="PreserveLoginUrl" value="true"/>
        <add key="ClientValidationEnabled" value="true"/>
        <add key="UnobtrusiveJavaScriptEnabled" value="true"/>

导致这个问题的最终原因是我使用了非传统的下拉菜单。为了解决这个问题,我向<a role="menuitem">添加了一个class,如下所示:

@<li role="presentation"><a class="ddlist" role="menuitem" tabindex="-1" href="#"
                                >@Html.DisplayFor(Function(modelItem) currentItem)</a></li>

,然后使用:

$('.ddlist').click(function () {

触发ajax调用。

我还删除了从设计阶段遗留下来的href="/LocationSelect/SelectFloor",并导致部分视图在自己的页面中打开,当选择时,ajax没有被触发。

最新更新