2009-06-15 12 views
4

私は本当に単純な問題がありますが、それを理解できないようです。.NET MVC jQuery window.locationの相対パス

MVCがURLを構築する方法(すべての経路情報を含む)のため、以下は機能しません。私はパス名仮想ディレクトリのパスを返すだけです。

ユーザーがドロップダウンリストからIDを選択すると、別のルートにリダイレクトされます。

$(document).ready(function() { 
    $('#TransactionIds').change(function() { 
     document.location = window.location.pathname + "/CeuTransaction/Index/" + $('#TransactionIds').val(); 
    }); 
}); 

答えて

9

パスを構築するには、UrlHelperを使用します。 Webサーバーのルートに関連するアプリケーションの場所が考慮されます。

$(document).ready(function() { 
    $('#TransactionIds').change(function() { 
     document.location = '<%= Url.Action("Index", "CeuTransaction") %>' 
          + '/' 
          + $('#TransactionIds').val(); 
    }); 
}); 

代替:機能のJavaScriptライブラリに含めることができるように、2つの部分に分割(静止ビューまたはマスターから起動する必要があります)。ちょっとした作業で、jQuery拡張機能にすることもできます。ビューで

function redirectOnChange(selector, action) 
{ 
    $(selector).change(function() { 
     document.location = action + '/' + $(selector).val(); 
    }); 
} 

$(function() { 
    redirectOnChange('#TransactionIds', 
        '<%= Url.Action("Index", "CeuTransaction") %>'); 
}); 
+0

謝罪を。私はこのスクリプトがページ自体ではなくスクリプトライブラリに含まれていることを忘れていました。 – Rake36

+0

私の答えは回避策で更新されました。 – tvanfosson

+0

ありがとうございます。スタイルの観点から、私はいつもWebページから埋め込みJSを完全に削除しようとします。私はあなたのソリューションが好きで、私はそれを使用することができない場合は、私はより快適に感じるものを思い付くでしょう。私はjQueryを学習するprototype.jsユーザーです - 利用可能なすべての可能性を認識していません。 – Rake36

6

は、ここに私がやってしまったものです。

は、ページに非表示のテキストフィールドを追加しました:

<input type="hidden" value="<%= Url.Content("~/CeuTransaction/Index/") %>" id="pathname" /> 

はjsのスクリプトライブラリに次のように使用:

// The following line enables jQuery intellisense 
/// <reference path="jquery-1.3.2-vsdoc.js" /> 

$(document).ready(function() { 
    $('#TransactionIds').change(function() { 
     document.location = $('#pathname').val() + $('#TransactionIds').val(); 
    }); 
}); 
+0

razorエンジンを使用しているMVC3ユーザーの場合、 '' –