在这里搜索了一堆文章和问题,但无法理解这一点。
我有一个页面可以在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>
如果需要其他任何事情,请告诉我。正如我所说,第一次加载工作。一切都正确显示,只是当我单击文件夹链接时,它会在页面级别重新渲染,而不是更新对话框的内容。
感谢。
答案 0 :(得分:0)
我的错误..我应该将目标设置为scopeManagerDialog而不是scopeManagerContainer。这个问题现在确实有点无意义,但不确定删除问题的政策是什么。我现在就把它留给一个mod来决定如何处理它。