情景:
我的部分视图在我的ASP.NET MVC应用程序的几个地方使用。局部视图包含要选择的“对象”列表,即类似于:
<ul>
<%
foreach (var person in Model.Persons)
{
%>
<li><a href="#" class="person">
<%= person.Name %></a></li>
<%
}
%>
</ul>
每个人都有一个独特的身份证。
我使用jQuery作为我的AJAXy的东西,直到现在我已经通过以下方式为链接添加了点击功能(虽然它有非常类似jQuery的气味)
<a href="#" class="person" onclick="return selectPerson('<%= person.Id %>');">
<%= person.Name %></a>
它可以工作,但是它还要求我使用这个局部视图在每个页面上都有一个selectPerson()javascript函数(因为select中的每个视图都是“特殊的”)。
我偶然发现了jQuery Data()方法,它似乎能够支持我的需求,即在使用我的部分人员列表视图的视图中,我可以做类似的事情:
$("a.person").click(function() { alert($(this).data("personId")); return false; });
如果我将Id附加到DOM元素上的“personId”数据属性。
现在我遇到的问题是我在HTML渲染服务器端,但是将“personId”数据属性附加到DOM元素必须在客户端完成。即在foreach循环期间或在单独的JS循环中,但我宁愿避免这种情况。
也许我走错了路,我不知道,但也许有人有解决方案或者更好的方法?
编辑(为清晰起见而更新):
以某种方式执行
$(选择“当前”锚点)。data(“personId”,设置为person.Id 的值);
答案 0 :(得分:0)
更好的方法是使用不引人注目的JavaScript。您可以正常生成链接:
<a class="person" href="http://example.com/persons/select?id=<%= person.Id %>"><%= person.Name %></a>
<!-- or use helpers to generate the link -->
<%= Html.RouteLink(person.Name, "Default", new RouteValueDictionary(new { controller = "Persons", action = "Select", id = person.Id })) %>
然后ajaxify it:
jQuery(function() {
jQuery('a.person').click(function(evt) {
jQuery.ajax({
url: this.href,
success: function(data) {
// Do something with the returned content
}
});
});
});
我不太明白为什么要使用JQuery.data()
答案 1 :(得分:0)
为什么不将您的人员ID“转储”到链接的ID字段中。
<a href="#" class="person" id="person_<%= person.Id %>"><%= person.Name %></a>
现在您已拥有该ID,您可以使用jQuery将click
事件附加到person
类的每个链接,如darin所示:
jQuery(function() {
jQuery('a.person').click(function(evt) {
return selectPerson(this);
});
});
现在在selectPerson函数中,或者在上面提到的函数中,你必须获得元素的id
(类似于person_234
)并取消person_
部分和你已经完成了。
答案 2 :(得分:0)
您可以使用jQuery Metadata插件.. 基本上它在类属性中使用json数据,在访问时会自动序列化。
但是它增加了许多标记..
请参阅http://plugins.jquery.com/project/metadata以供参考。
干杯,
埃里克