ASP.NET MVC视图和jQuery.data()

时间:2009-03-31 08:17:20

标签: jquery asp.net-mvc

情景:

我的部分视图在我的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 的值);

3 个答案:

答案 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以供参考。

干杯,

埃里克