none
ASP.NET MVC2 开发中遇到的JQuery中的javascript 问题 RRS feed

  • 问题

  •  

    初次进此页面的时候上边两个按钮的事件都正常。 但当你点翻页后 ,调用JQuery的事件就不工作了  而普通的调用正常。怎么回事?

    个人发现是MVC 中return view("Product"); 中 return view()本身机制造成,网上见到有人说:(对于return view,mvc框架不会发起一个新的http请求)  所有客户端对相同页面没重新注册事件造成?  不知道是否正确,还请高手解答。该怎么解决,又不用放弃JQuery使用。
    还要注意的一点是 :
    http://localhost:1834/Product    这个地址不关什么时候就没问题。
    http://localhost:1834/Product/SelectItemByPage/2    这个地址不管是第一次还是N次 Jquery 都不工作

    项目文件结构:

    NorthwindWeb

        + Controllers

            -  ProductController.cs

        + Views

            +  Product

                -  Index.aspx

     

    Product 文件夹下的 Index.aspx

    <input type="button" id="btnadditem" onclick="additem()" value="普通-添加产品" /> <input type="button" id="btnadditem" value="JQuery-添加产品" /> <ul class="ul_page"> <li><a href="/Product/SelectItemByPage/1">首页</a></li> <li><a href="/Product/SelectItemByPage/1" > 1</a></li> <li><a href="/Product/SelectItemByPage/2" id=nowpage> 2</a></li> <li><a href="/Product/SelectItemByPage/3" > 3</a></li> <li><a href="/Product/SelectItemByPage/3"> 尾页</a></li> <li><a>共82条</a></li> </ul> <script type="text/javascript"> function additem(){ document.getElementById("div_additem").style.display="block"; } $("#btnadditem").live("click", function() { $("#div_additem").slideDown("slow"); }); </script>
    Index.aspx 的 Controller

    public class ProductController : Controller { public ActionResult Index() { return View(); } public ActionResult SelectItemByPage(int id) { return View("Index"); } }

     

    • 已编辑 龙人 2010年6月29日 4:39
    2010年6月28日 10:43

答案

  • 谢谢您的答案     我已经找到我这根本问题。 就是有的页面 文件路径找不到 不过有出现个新问题。 就是  IIS5.1(我这用的是XP系统装的 5.1的) 跟VS2008 虚拟的那个服务器 出的问题还不一样

    代码这样写<script src="<%=Url.Content("~/Content/ShowAddItem.js") %>" type="text/javascript"></script>

    客户端生成<script src="/NorthwindWeb/Content/ShowAddItem.js" type="text/javascript"></script>


    但是 JS文件里面的  $(this).css({ background: "url(/Content/close.gif) no-repeat" }) 中的URL没法这样写。所有都是 /Content/close.gif  这就造成 IIS中 找不到这个路径。。。

    VS2008虚拟服务器因为就一个 所以/Content/close.gif 这样写没问题  但 部署到IIS上的时候 多了个 虚拟目录 NorthwindWeb    所以造成JS里面找不到路径了,但又不能手写成background: "url(NorthwindWeb/Content/close.gif) no-repeat   因为部署不同服务器上 虚拟目录都不太一样,这该怎么解决,怎么能让 JS里永远都能起作用
    http://tell5.net
    • 已标记为答案 龙人 2010年6月29日 11:43
    2010年6月29日 5:58

全部回复

  • View本身的设计已经很好了,这样部分返回的优势也很明显。

    当翻页后你的<div id="div_additem"...>会重新加载的,但是jQuery已经绑定好了。这个时候需要使用jQuery新增的一个绑定事件的机制:

    $('#btnadditem').live('click',function(e){
      //跟原来的click处理方法一样
    });

    这时jQuery就会自动给新增加的元素绑定合适的事件及处理方法了。


    Please mark the post answered your question as the answer, and vote other helpful posts, so they will appear differently to other users for the same problem. 请将解决实际问题的帖子标记为“答案”,并给其他有帮助的帖子投票,这样其他人有同样问题的时候可以快速找到解决方案。谢谢!
    2010年6月29日 1:02
    版主
  • 不行 。 我试过了。不管用。

    http://tell5.net
    2010年6月29日 4:18
  • 噢。那你是怎么给btnadditem绑定事件的呢?把代码贴来看看吧。
    Please mark the post answered your question as the answer, and vote other helpful posts, so they will appear differently to other users for the same problem. 请将解决实际问题的帖子标记为“答案”,并给其他有帮助的帖子投票,这样其他人有同样问题的时候可以快速找到解决方案。谢谢!
    2010年6月29日 4:22
    版主
  • 看到你的代码了。

    你的js是放在Index.aspx文件后面部分的吧?

    给那段js改成下面的试试看:

    $(function(){
     $("#btnadditem").live("click", function() {
      $("#div_additem").slideDown("slow");
     });
    });

    Please mark the post answered your question as the answer, and vote other helpful posts, so they will appear differently to other users for the same problem. 请将解决实际问题的帖子标记为“答案”,并给其他有帮助的帖子投票,这样其他人有同样问题的时候可以快速找到解决方案。谢谢!
    2010年6月29日 5:17
    版主
  • 弄了半天是 母板页的问题。

    以前是 <script src="../../Scripts/jquery-1.4.1-vsdoc.js" type="text/javascript"></script>  拖拽到页面自动生成的

     

    现在该为 <script src="<%=Url.Content("~/Scripts/jquery-1.4.1-vsdoc.js") %>" type="text/javascript"></script> 一切正常了。随便一个页面的跳都没问题 

     

    晕,想尽量少用 <% %>  这符号都不行


    http://tell5.net
    2010年6月29日 5:19
  • 谢谢您的答案     我已经找到我这根本问题。 就是有的页面 文件路径找不到 不过有出现个新问题。 就是  IIS5.1(我这用的是XP系统装的 5.1的) 跟VS2008 虚拟的那个服务器 出的问题还不一样

    代码这样写<script src="<%=Url.Content("~/Content/ShowAddItem.js") %>" type="text/javascript"></script>

    客户端生成<script src="/NorthwindWeb/Content/ShowAddItem.js" type="text/javascript"></script>


    但是 JS文件里面的  $(this).css({ background: "url(/Content/close.gif) no-repeat" }) 中的URL没法这样写。所有都是 /Content/close.gif  这就造成 IIS中 找不到这个路径。。。

    VS2008虚拟服务器因为就一个 所以/Content/close.gif 这样写没问题  但 部署到IIS上的时候 多了个 虚拟目录 NorthwindWeb    所以造成JS里面找不到路径了,但又不能手写成background: "url(NorthwindWeb/Content/close.gif) no-repeat   因为部署不同服务器上 虚拟目录都不太一样,这该怎么解决,怎么能让 JS里永远都能起作用
    http://tell5.net
    • 已标记为答案 龙人 2010年6月29日 11:43
    2010年6月29日 5:58
  • 噢。原来这样。

    网站在部署的时候,如果按虚拟目录部署,就需要特别注意路径问题。用<%%>标签也没啥不好的嘛:)


    Please mark the post answered your question as the answer, and vote other helpful posts, so they will appear differently to other users for the same problem. 请将解决实际问题的帖子标记为“答案”,并给其他有帮助的帖子投票,这样其他人有同样问题的时候可以快速找到解决方案。谢谢!
    2010年6月29日 6:27
    版主