【问题标题】:How to call function from within a partialview that reloads the partialview itself如何从重新加载局部视图本身的局部视图中调用函数
【发布时间】:2014-03-07 05:31:03
【问题描述】:

我有一个带有链接的 MVC 索引视图,单击该链接会调用一个 JQuery 方法,该方法会触发 Ajax POST 以将 PartialView 动态加载到 div 中。

内部 PartialView 我有一个表单,提交时需要重新加载自身(PartialView)到索引视图的 div 中。

当我尝试下面的代码时,它在 Visual Studio 中出现内存异常。

如何像这样“重新加载”局部视图?我可以从 PartialView 引用主(包含)视图中的 div 吗?

相关代码如下sn-ps

索引视图

<a href="#" class="buttonId currentplayer" data-userteamid="60" data-footballclub="" data-searchstring="">click to load game 60</a> 

<div id="teampartial"></div>

<script type="text/javascript">
var returnTeam = function (link) {
    debugger;
    var userTeamId = $(link).attr('data-userteamid');
    var footballClub = $(link).attr('data-footballclub');
    var searchString = $(link).attr('data-searchstring');
    $.ajax({
        type: 'POST',
        url: '/ViewPlayers/TeamOverView',
        data: {
            userTeamId: userTeamId,
            footballClub: footballClub,
            searchString: searchString
        },
        success: function (data) {
            $('#teampartial').empty();
            $('#teampartial').append(data);
        }
    });
};

$('.buttonId').click(function () {
    returnTeam(this);
});

控制器动作

[HttpPost]
    public ActionResult TeamOverView(int userTeamId, string footballClub, string searchString)
    {
        var _teamOverView = _service.GetTeamOverViewViewModel((int)userTeamId, footballClub, searchString);
        return PartialView("teamdetails", _teamOverView);
    }

团队详细信息部分视图

<h2>List of Players</h2>
            using (Html.BeginForm("TeamOverView", "ViewPlayers", FormMethod.Post,new { id = "filterPlayers" }))
            {
                <p> 
                    @Html.DropDownListFor(x => x.Clubs, new SelectList(Model.Clubs,"Value","Text"), "All")
                    Name: @Html.TextBox("searchString") 
                    <input type="hidden" name="userTeamID" value="@Model.UserTeamId" />
                    <input type="submit" value="Filter" />
                </p>
            }
            <table>
                @foreach (var item in Model.PlayersSearchedFor)
                {
                    <tr>
                        <td>
                            @Html.DisplayFor(modelItem => item.Name)
                        </td>
                    </tr>
                }
            </table>

<script type="text/javascript">
    var returnSelectTeam = function () {
        debugger;
        $.ajax({
            type: 'POST',
            url: '/ViewPlayers/TeamOverView',
            data: $("#filterPlayers").serialize(),
            success: function (data) {
                $('#teampartial').empty();
                $('#teampartial').append(data);
            }
        });
    };

    $('#filterPlayers').submit(function () {
        returnSelectTeam();
    });
</script>

【问题讨论】:

    标签: jquery ajax asp.net-mvc asp.net-mvc-partialview


    【解决方案1】:

    你要找的是Ajax.BeginForm

    团队详细信息部分视图

    <h2>List of Players</h2>
    
            @using (Html.BeginForm("TeamOverView", "ViewPlayers", new AjaxOptions { 
    HttpMethod = "POST", UpdateTargetId = "teampartial", InsertionMode = InsertionMode.Replace }))
            {
                <p> 
                    @Html.DropDownListFor(x => x.Clubs, new SelectList(Model.Clubs,"Value","Text"), "All")
                    Name: @Html.TextBox("searchString") 
                    <input type="hidden" name="userTeamID" value="@Model.UserTeamId" />
                    <input type="submit" value="Filter" />
                </p>
            }
            <table>
                @foreach (var item in Model.PlayersSearchedFor)
                {
                    <tr>
                        <td>
                            @Html.DisplayFor(modelItem => item.Name)
                        </td>
                    </tr>
                }
            </table>
    

    这将做的是发送一个表单数据的 ajax 帖子,并获取结果并用结果替换目标。

    因此,请确保您在操作中的响应类似于:

    return PartialView("PartialViewName");
    

    这里有一些sample code and tutorial

    【讨论】:

    • 不-我已经知道如何将内容加载到 div 中(从索引视图中,我使用 JQuery 而不是 Microsoft.Ajax 将部分视图加载到 div 中)-我遇到的问题是我还有一个表单 inside 加载的部分视图需要将部分视图“重新加载”到“包含”索引视图中的 div 中。
    • 正如我之前所说,如果您使用 Ajax.BeginFrom 代替它会正常工作。我已经用你的代码更新了我的问题。 Ajax.BeginForm 不在乎它是否在局部视图中。
    • 啊。为我之前的评论道歉。你能解释一下为什么可以使用 Ajax.BeginForm 而不是 JQuery 吗?
    • 我刚试过这个,它用部分视图替换整个页面,而不是刷新 teamdetails div。这可能是因为,在部分视图中,它无法找到 id 为“teamdetails”的元素(因为该 div 在包含“索引”视图中)??
    • 不,它应该工作得很好,当然你也可以用 jQuery 来做,但是 MVC 框架是开箱即用的,所以在这种情况下它没有必要(除非你需要自定义的东西)按照教程以上,我认为它涵盖了所有内容。
    猜你喜欢
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 2011-11-09
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多