2011-10-25 18 views
5

これは私の開発マシンでは動作しますが、本番サーバーでは動作しません。私はいくつかのdivをajaxで更新しようとしていますが、他の部分はうまく動作しますが、更新されていません。私はサーバー上でIIS 6を使用しています。 firebugを使用してサーバー側でこのコードをデバッグすると、成功関数に追加するブレークポイントはヒットしません。サーバー上のAJAX成功関数

スクリプト:

function updateServiceInfo(nodeId) { 
     var id = { id: nodeId }; 
     $.ajax({ 
      url: '/ServiceInfo/ServiceInfoPartial', 
      type: 'GET', 
      data: id, 
      dataType: 'html', 
      success: function (data) { 
       $('#serviceInfoContent').html(data); 
      }, 
    error: function (request, error) { 

    } 
     }); 
    } 

コントローラー:

public class ServiceInfoController : Controller 
    { 
     public ActionResult ServiceInfo() 
     { 
      return PartialView("ServiceInfo"); 
     } 

     public ActionResult ServiceInfoPartial(string id) 
     { 
      return PartialView("ServiceInfoPartial"); 
     } 
    } 

再生回数:

serviceinfopartial

@model string 
<p> 
    Немає опису</p> 

SERVICEINFO

<div id="serviceInfo"> 
    <div id="ContainerPanel" class="ContainerPanel"> 
     <div id="serviceInfoHeader" class="collapsePanelHeader"> 
      <div id="dvHeaderText" class="HeaderContent"> 
       Опис сервісу</div> 
      <div id="dvArrow" class="ArrowClose"> 
      </div> 
     </div> 
     <div id="serviceInfoContent" class="serviceInfoContent"> 

     </div> 
    </div> 
</div> 

コンソールに返されるレスポンスは

GET http://localhost/Managers/GetManagers?nodeId=563344 404 Not Found 42ms 

答えて

12

Ahhhhhhhhhhhhhh、別のハードコードされたURLです:ASP.NET MVCアプリケーションでこのような

url: '/ServiceInfo/ServiceInfoPartial', 

決して打ちのURL。

必ず使用のURLヘルパーそれらを生成するために:

url: '@Url.Action("ServiceInfoPartial", "ServiceInfo")', 

か、これはあなたが単にHTML5データ - を使用するURLヘルパーを使用することはできません、別のJavaScriptファイルにある場合*一部のDOM要素の属性:

url: $('#serviceInfo').data('url'), 
:単にあなたのJavaScriptで
<div id="serviceInfo" data-url="@Url.Action("ServiceInfoPartial", "ServiceInfo")"> 
... 
</div> 

、その後、

IISでホストするときにコードが機能しない理由は、IISで仮想ディレクトリにアプリケーションをホストしている可能性があるため、正しいURLが/ServiceInfo/ServiceInfoPartialでなく、/YourAppName/ServiceInfo/ServiceInfoPartialであるためです。そのため、ヘルパーがこのケースを処理するため、URLをハードコードしてヘルパーを生成することは絶対にしないでください。ヘルパーを使用するもう一つの利点は、後でGlobal.asaxであなたのルートのレイアウトを変更する場合は、あなたのすべてのjavascriptファイルなどを変更する必要はありません...あなたのURL管理は単一の場所に集中しているということです。

+0

はい、javasriptのコードは別ファイルになっています。 url: '@ Url.Action( "ServiceInfoPartial"、 "ServiceInfo")、動作しません。 htis HTML5 atrributeは、例えばie7で動作しますか? –

+0

@andronz、はい、それはIE7で動作します。それがASP.NET MVC 3の控えめなクライアント検証とAJAXがすでに使用しているものです。 IE7がうんざりでHTML5をサポートしていない場合でも、jqueryはDOM要素に追加された属性をうまく解釈します。そして、IE7はHTML5やdata- *属性を聞いたことがないので、それを黙って無視します。 –

+0

@DarinDimitrov、別のjsファイルに書いたことについて1.非表示フィールドではなくdivにURLを保存するのはなぜですか? 2.そうすると、javascriptがビューと結合されますが、そうではありませんか? – gdoron

0

これは私のために働いたが、Chromeのみ53でテスト:

はちょうどスコープの問題に留意して、変数に一意の名前を付け、あなたの.cshtmlファイルにいくつかのグローバルスコープ変数を作成します。

<script> 
    globalUrl = '@Url.Action("ServiceInfoPartial", "ServiceInfo")'; 
</script> 

その後...あなたのyourJsFileインサイド

<script type="text/javascript" src="yourJsFile.js"></script> 

をあなたのjsファイルを参照します。js:

url: globalUrl, 
関連する問題