代码之家  ›  专栏  ›  技术社区  ›  veggerby

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

  •  1
  • veggerby  · 技术社区  · 17 年前

    <ul>
        <%
            foreach (var person in Model.Persons)
            {
        %>
        <li><a href="#" class="person">
            <%= person.Name %></a></li>
        <%
            }        
        %>
    </ul>
    

    每个人都有一个唯一的id。

    <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循环中,我都希望避免这种情况。

    编辑(为清楚起见更新):

    $( 选择“当前”锚点 设置为人的价值。I had 的常用口语形式 );

    3 回复  |  直到 17 年前
        1
  •  0
  •   Gideon    17 年前

    <a href="#" class="person" id="person_<%= person.Id %>"><%= person.Name %></a>
    

    现在你有了id,你可以使用jQuery来附加 click 事件与每个链接 person 正如达林所展示的:

    jQuery(function() {
        jQuery('a.person').click(function(evt) {
            return selectPerson(this);
        });
    });
    

    id 元素(如下所示 person_234 )然后脱下 person_

        2
  •  0
  •   Darin Dimitrov    17 年前

    <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 })) %>
    

    然后把它放大:

    jQuery(function() {
        jQuery('a.person').click(function(evt) {
            jQuery.ajax({
                url: this.href,
                success: function(data) {
                    // Do something with the returned content
                }
            });
        });
    });
    

    我不太明白你为什么要使用JQuery.data()

        3
  •  0
  •   Erik    17 年前

    您可以使用jQuery元数据插件。。 基本上,它在类属性中使用json数据,当访问时会自动序列化。。

    但它增加了很多标记。。

    看见 http://plugins.jquery.com/project/metadata

    干杯,

    埃里克