程序里面用到了ajax.net(http://server.chinabyte.com/77/2690077.shtml里面的组件),在没有使用url重写之前程序运行没有问题,使用了url重写之后页面里面调用的ajax方法都不起作用了;我是在Global.asax文件里面实现重写的:protected void Application_BeginRequest(Object sender, EventArgs e)
{
  ....
  重写.
   base.Context.RewritePath(newUrl);
}web.config文件:
<add verb="POST,GET" path="ajax/*.ashx" type="Ajax.PageHandlerFactory, Ajax" />
页面里面调用的ajax方法:
<script language="javascript" src="ajax/common.ashx"></script>
<script language="javascript" src="ajax/CompanySite.Ajax_Company,CompanySite.ashx"></script>
据我估计是重写以后这个运行路径发生了变化,也不知道怎么改了.

解决方案 »

  1.   

    因为重写以后url改变了,所以ajax方法不起作用。不用重写的话,url不变,ajax才起作用。
      

  2.   

    myjobs 
    .net拥护者 我也知道是可能是这个原因,不过这个ajax目录是ajax.net临产生的一个目录(我试过了改成网站绝对路径也不行),现在我就是不知道怎么改这个路径,能不能改?有遇到到过同样问题的高手请帮下忙.
      

  3.   

    ajax提交会回发到原来的action,但你重写了url,
    aspx页面form中action还是原来的,路径不对会报404错误;
    如果修改form.action ,ajax又会报405错误,目前正在研究中...跟你一样问题
      

  4.   

    Ajax.NET本身就支持URL重写啊
    在web.config中添加配置项应该就可以了.<configSections>
        <sectionGroup name="ajaxNet">
          <section name="ajaxSettings" type="Ajax.AjaxSettingsSectionHandler,Ajax" />
        </sectionGroup>
      </configSections>
       <ajaxNet>
        <ajaxSettings>
    <add type="Namespace.Class1,Assembly" path="mypath" />
        </ajaxSettings>
       </ajaxNet>
      

  5.   

    写错了,应该是这样的<ajaxNet>
        <ajaxSettings>
         <urlNamespaceMappings useAssemblyQualifiedName="false" allowListOnly="false">
           <add type="Namespace.Class1,Assembly" path="mypath" />      
         </urlNamespaceMappings>
        </ajaxSettings>
    </ajaxNet>
      

  6.   

    protected void Application_BeginRequest(Object sender, EventArgs e)
    {    
      ....
    如果不是ajax/*.ashx{
      重写.
    }
       base.Context.RewritePath(newUrl);
    }
      

  7.   

    顶。------------------------------------------------------------------------
    要了解我的详细信息请进入我的主页Bridal gownBridal shop
      

  8.   

    lembo520390 
    巴库
    你的方法多没试过,明天再试下,刚参考了一篇文章,希望可行.
    http://www.cnblogs.com/cdo/archive/2006/03/08/262368.html武眉博<活靶子.NET>你的方法今天我也试过了,好像只要用程序里面用RewritePath就不行了,不管你有没有判断.
      

  9.   

    我用的Ajax.NET的版本是5.7.22.2,URL重写的功能我用过的,是可以用的.不过不好意思上面拈的配置文件还没对,正确应该是这样的.<configuration>
     <configSections>
        <sectionGroup name="ajaxNet">
          <section name="ajaxSettings" type="Ajax.AjaxSettingsSectionHandler,Ajax" />
        </sectionGroup>
      </configSections>
       <ajaxNet>
        <ajaxSettings>
    <urlNamespaceMappings>
                          <!--namespace是你的实际路径,path中的是你的重写路径. -->
    <add namespace="Namespace.Class1,Assembly" path="mypath"/>
    </urlNamespaceMappings> 
        </ajaxSettings>
       </ajaxNet>
    </configuration>
      

  10.   

    lembo520390   
    巴库 
    你的方法在vs2003下面能用吗?
      

  11.   

     还有,这个路径path是什么意思,能解释下(举个例子可以吗),谢谢 了?<!--namespace是你的实际路径,path中的是你的重写路径. -->
    <add namespace="Namespace.Class1,Assembly" path="mypath"/>
      

  12.   

    <script   language="javascript"   src="ajax/common.ashx"> </script> 
    <script   language="javascript"   src="ajax/CompanySite.Ajax_Company,CompanySite.ashx"> </script> 上面已经说了:
    CompanySite.Ajax_Company:我程序的工程名是CompanySite,调用的是Ajax_Company类里面的方法;
    重写路径的话是这样子:
    <LookFor>http://(\w+)\.cn\.abc\.com/2/</LookFor>
    <SendTo>~/2/index.html?id=$1</SendTo>具体到
    <!--namespace是你的实际路径,path中的是你的重写路径.   --> 
    <add   namespace="Namespace.Class1,Assembly"   path="mypath"/> 
    怎么表示?
      

  13.   

    就是在VS2003下的  .NET1.1的. 在.NET2.0一般用的是AjaxPro <add   namespace="Namespace.Class1,Assembly"   path="mypath"/>
     namespace中的Namespace是你的命名空间,Class1是类名称,Assembly是程序集名. 
     path是你自己定义的,就是重写后的URL.如果是你的情况应该是这样吧 <add namespac="CompanySite.Ajax_Company,CompanySite"  path="随便其它路径"/>
      

  14.   

    lembo520390       
    巴库   你的方法我试了,还是不行,上面的设置好像只是给ajax的运行环境改目录(默认的是ajax),重写以后路径还是找不到.我把Application_BeginRequest重写的方法也贴出来了,好像只要一用到RewritePath重写就会在index.html就会提示Ajax_Company未定义 protected void Application_BeginRequest(Object sender, EventArgs e)
    {
    string newUrl="~/Default.aspx";
    //取得域名信息
    string HostName = HttpContext.Current.Request.Url.Host.ToString();
    //取得网址后缀
    string PathAndQuery =HttpContext.Current.Request.Url.PathAndQuery.ToString();
    if (PathAndQuery==string.Empty)
    {
    PathAndQuery="/Index.html";
    } if (HostName.ToLower().IndexOf(".cn.abc.com")!=-1 && PathAndQuery.IndexOf("ajax")==-1)
    {
    string [] UserHost = HostName.Split (new Char [] { '.' }); 
    CompanySite.Ajax_Company userinfo=new CompanySite.Ajax_Company();
    //取得公司信息(UserHost[0]:公司名称; ds.Rows[0]["ModelID"].ToString()主页模板)
    DataTable ds=userinfo.GetDomainNameInfo(UserHost[0]);
    if (ds.Rows.Count>0)
    {
    //重新分配网页地址
    if (PathAndQuery.IndexOf('?')!=-1)
    {
    newUrl="~/"+ ds.Rows[0]["ModelID"].ToString() + PathAndQuery +"&id="+ds.Rows[0]["id"].ToString();
    }
    else
    {
    newUrl="~/"+ ds.Rows[0]["ModelID"].ToString() + PathAndQuery +"?id="+ds.Rows[0]["id"].ToString(); 
    }
    }
    else
    {
    //没找到id
    }
    }
    else
    {
    //域名禁止访问
    }
    //Response.Redirect(newUrl);
    base.Context.RewritePath(newUrl);

    }哪位大侠再帮我看下,不要告诉我又是无解了.
      

  15.   


    //你在这里把ajax的请求的屏蔽掉了,但在else里启用了吗
    if (HostName.ToLower().IndexOf(".cn.abc.com")!=-1 && PathAndQuery.IndexOf("ajax")==-1)
    {
    ...
    }
    else
    {
      //域名禁止访问
    }
      

  16.   

    lembo520390 
    巴库
    很谢谢你的热心,不过你上面说的不是问题的关键,关键的是只要一用到RewritePath就会出问题(我测试过了),Application_BeginRequest方法里面只放这一句也不行:
    HttpContext.Current.RewritePath("~/2/index.html");
    我已经加你为好友了,方便的话可以在QQ上聊,谢谢!
      

  17.   

    lembo520390 
    刚刚参考了下urlNamespaceMappings节设置的功能,它只是把ajax服务运行时的路径映射到"/ajax/path所指向的路径"(加了一层而已),并不是你所说的"Ajax.NET本身就支持URL重写".
      

  18.   

    革命尚未成功,
    CSDN-Friends继续努力!
      

  19.   

    只有你我努力,革命不易成功.我看你Application_BeginRequest写得应该有问题.当有ajax/CompanySite.Ajax_Company,CompanySite.ashx这个请求时,看你的代码就是运行那个 //禁止域名访问的 else语句了. 你可以试一下在那个else里重新设一下 newUrl 看看问题是不是出在这里.