2014-08-29 62 views
0

我已经在局部视图下面的代码:困惑与ActionLink的做内部的Ajax调用for循环

foreach (var documentFolder in Model.DocumentFolders){ 
    <span id="Folder"> 
     @Html.ActionLink(documentFolder.DisplayNameProperty, "ControllerAction", "Controller", null, new{@name = documentFolder.IDProperty, @id = "lbGetFile", @class = "textLink", @style = "text-decoration: underline; color: blue; cursor: pointer;"}) 
    </span> 
} 

我有这样的jQuery代码:

$("#lbGetFile").click(function(){ 
     debugger; 
     $.ajax({ 
      url: this.href, 
      type: "POST", 
      data: { selectedFolderID: $("#lbGetFile").attr('name') }, 
      error: function (jqXHR, textStatus, errorThrown) { 
       debugger; 
      }, 
      success: function (data) { 
       debugger; 
      } 
     }); 
     return false; 
    }); 

什么我注意到是只有我的for循环的第一个项目才能正确地返回成功函数。它可能是因为for循环中的每个项目都有相同的id,但我无法弄清楚该怎么办?

此外,我会认为,而不是一个for循环编辑器模板应该在这里更好地工作,但可以成功的Ajax调用正确地重写编辑器模板区域?

+2

这是因为相同的ID确实。但是,你可以很容易地完全摆脱它。只要选择一个不同的选择器,比如类和元素,然后在处理器内部使用'this' – Andrei 2014-08-29 15:43:56

+0

@andrei,那么......如何在动态时编写JQuery选择器?我可以理解使用$(“#hello .world”)选择基于say“id ='hello'class ='world'”的标签。 – Jason 2014-08-29 15:51:39

+0

扩大答案。希望它能澄清这个 – Andrei 2014-08-29 16:10:21

回答

0

你的问题确实是由于相同的ID。不仅如此,您所有的span标签也具有相同的标识Folder。完全重新访问它并从代码中删除ID可能是一个好主意。所以标记可能是这样的:

foreach (var documentFolder in Model.DocumentFolders){ 
    <span class="folder"> 
     @Html.ActionLink(documentFolder.DisplayNameProperty, "ControllerAction", "Controller", null, new{@name = documentFolder.IDProperty, @class = "textLink", @style = "text-decoration: underline; color: blue; cursor: pointer;"}) 
    </span> 
} 

请注意,不再有任何标识,类代替。类允许轻松重复并且不引起冲突。

至于JavaScript的 - 这里是你如何查询:

$("span.folder .textLink").click(function(){ 

这将选择您需要的所有链接。而且您已经知道您可以在处理程序中使用this来引用当前单击的元素。

+0

Thx @Andrei,这很好。对于像我这样混淆的人来说,选择这种结构''在jQuery中去''(“#Folder .textLink .textLink “)。单击(函数(){' – Jason 2014-08-29 18:10:57