目标div内的Ajax.ActionLink更新目标div

时间:2014-05-19 00:48:00

标签: ajax asp.net-mvc-3 jquery-ui razor

在这里搜索了一堆文章和问题,但无法理解这一点。

我有一个页面可以在jqueryUI对话框中打开文件管理器。此文件管理器只显示主资源文件夹中的一些缩略图和子文件夹列表。这个想法是用户点击一个子文件夹,并获得该文件夹中的拇指和子文件夹列表..我确信你明白了。但是,单击文件夹链接时,整个页面不仅会更新对话框。

在我引用的父页面中

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

和jquery函数准备并打开对话框:

$("#scopeManagerDialog").dialog({
            autoOpen: false,
            width: 400,
            resizable: false,
            title: "File Manager",
            modal: true,
            buttons: {
                "Close": function () {
                    $(this).dialog("close");
                }
            }
        });

        $("#openScopeManager").click(function() {
            $("#scopeManagerDialog").load("@Url.Action("Index", "ScopeManager")",
                function(response, status, xhr) {
                    $("#scopeManagerDialog").dialog("open");
                });
            return false;
        });

和它加载的div:

<div id="scopeManagerDialog" title="Scope Manager" style="overflow: hidden">
</div>

返回部分

的控制器操作
public ActionResult Index(string path)
        {
            if (path==null)
            {
                path = ConfigurationManager.AppSettings["assetRoot"];
            }

            List<AssetVM> assets = ScopeManager.GetAllAssets(Server.MapPath(path));
            List<FolderVM> folders = ScopeManager.GetAllFolders(Server.MapPath(path));
            AssetSetVM model = new AssetSetVM()
                                {
                                    Path = path,
                                    Assets = assets,
                                    Folders = folders
                                };
            return PartialView("ScopeManager", model);
        }

最后是部分自己。请注意,ActionLink引用包含div(我想知道这是否是问题..我希望不是,我的直觉说这应该是可能的)。

<div id="scopeManagerContainer">
    <div id="folderList">
        <ul>
            @foreach (FolderVM folder in Model.Folders)
   {
                <li>@Ajax.ActionLink(folder.Name,"Index","ScopeManager",new AjaxOptions {UpdateTargetId = "scopeManagerContainer"})</li>
   }
        </ul>
    </div>
    <div id="fileList">
        @foreach (AssetVM asset in Model.Assets)
  {
            <img src='@Url.Action("GetThumbnail", new { path = string.Format("{0}/{1}", Model.Path, asset.FileName), width = 100, height = 100 })' />
  }
    </div>
</div>

如果需要其他任何事情,请告诉我。正如我所说,第一次加载工作。一切都正确显示,只是当我单击文件夹链接时,它会在页面级别重新渲染,而不是更新对话框的内容。

感谢。

1 个答案:

答案 0 :(得分:0)

我的错误..我应该将目标设置为scopeManagerDialog而不是scopeManagerContainer。这个问题现在确实有点无意义,但不确定删除问题的政策是什么。我现在就把它留给一个mod来决定如何处理它。