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

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

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

    脚本:

    我有一个局部视图,它在我的ASP.NET MVC应用程序的多个地方使用。部分视图包含要选择的“对象”列表,即类似于以下内容的内容:

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

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

    我把jquery用于我的半成品,直到现在,我已经用以下方式向链接添加了点击功能(尽管它有一种非常非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(“个人ID”, 设置为person.id的值 ;

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

    为什么不把你的个人ID“转储”到链接的ID字段中呢?

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

    现在在selectPerson函数中,或者在上面所述的函数中,您必须 id 元素(就像 person_234 )然后取下 person_ 一部分,你就完了。

        2
  •  0
  •   Darin Dimitrov    15 年前

    更好的方法是使用不引人注目的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:

    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    15 年前

    您可以使用jquery元数据插件。 基本上,它使用的是类属性中的JSON数据,访问时会自动序列化。

    但是它增加了很多标记。

    看见 http://plugins.jquery.com/project/metadata 供参考。

    干杯,

    埃里克