使用@ url.action调用部分视图使用jquery单击

时间:2014-11-17 15:06:09

标签: jquery asp.net-mvc razor url.action

在@ url.action上调用部分视图。我正在使用url.action显示记录,并希望在用户单击记录时加载部分视图。

这是我的代码,我想在用户点击它时调用局部视图。

<td>
<a href="@Url.Action("Details", new { id=item.TeamId})">
 @Html.DisplayFor(modelItem => item.TeamName)
</a>
</td>

这是我的Div,其中我放置了部分视图

<div id="detailsPlace" class="dialog_content3" style="display:none"></div>
         @Html.Partial("_TeamDetails")
    </div>

这是我要渲染的部分视图

@model light.ViewModels.ViewDetailTeam
@{
    var item = Model.Team;
}

    <div class="dialogModal_header">@Html.Label(item.TeamName)</div>
    <div class="dialogModal_content">
        <div class="main-content">
            <div class="navi-but">
                    @Html.Label(item.TeamName)
                </div>
                    @Html.Label(item.Description)
                </div>
            </div>
        </div>

这是我的控制器

public ActionResult Details(int id)
        {

            lightCoreModel.User loggedInUser = new lightCoreModel.User();


                ViewDetailTeam viewDetailTeam = new ViewDetailTeam();
                ViewData["DetailModel"] = viewDetailTeam;
                viewDetailTeam.Retrieve(id);
                return PartialView("_TeamDetails",viewDetailTeam);

        }
now i am facing this problem with pop up its showing me the following screen.

enter image description here

3 个答案:

答案 0 :(得分:4)

您可以使用ajax获取列表详细信息并渲染局部视图而不刷新整个页面

首先使用命令

安装包jQuery.Ajax.Unobtrusive

安装包jQuery.Ajax.Unobtrusive

并确保列表中包含 jQuery-xxxx.js和jquery.unobtrusive-ajax.js

修改我想在用户点击时调用局部视图的代码

<a  href="@Url.Action("Details", new { id=item.TeamId})" data-ajax='true' data-ajax-update='#detailsPlace' data-ajax-mode='replace'>

@Ajax.ActionLink("Details", 
                 "Details", 
                  new { id=item.TeamId}, 
                 new AjaxOptions { HttpMethod = "GET", 
                 InsertionMode = InsertionMode.Replace, 
                 UpdateTargetId = "detailsPlace"})

并在视图顶部添加此代码

if (Request.IsAjaxRequest())
{
   Layout=null;
}

了解更多信息,请访问http://chsakell.com/2013/05/12/mvc-unobtrusive-ajax/

答案 1 :(得分:4)

你需要Ajax才能做到这一点。首先,使用以下代码在视图中添加脚本块:

<script type="text/javascript">
    $(function () {
        $('.details').click(function () {
            var $buttonClicked = $(this);
            var id = $buttonClicked.attr('data-id');

            $.ajax({
                url: '@Url.Action("Details")',
                type: 'GET',
                data: { id: id },
                success: function (partialView) {
                    $('#detailsPlace').html(partialView);
                    $('#detailsPlace').show();
                }
            });
        });
    });
</script>

然后将您的锚标记更改为:

<a href="#" class="details" data-id="@item.TeamId">Details</a>

只要点击具有详细类别的元素,就会触发ajax调用。单击后,存储在data-id属性中的Id将传递给控制器​​。当你的控制器返回部分视图时,部分视图将被加载到ajax调用的success函数中,并且将显示detailsPlace,因为它的显示被设置为none。

答案 2 :(得分:1)

如果您想将部分视图放在div中,您可能需要尝试使用Ajax帮助器。首先,尝试将ActionResult更改为PartialViewResultAjax助手的定义之一如下:

@Ajax.ActionLink("Display name",
        "Your partial action name",
        "Controller name",
        new { /* object values */ }, // e.g. ID = yourmodel.ID or null
            new AjaxOptions {
                HttpMethod = "GET",
                UpdateTargetId = "your div id without #",
                InsertionMode = InsertionMode.Replace
            })