2017-11-15 13 views
1

テーブルと呼ばれるコントローラのActionResultにPOSTしようとしているJavaScriptが少しあります。何らかの理由でルーティングが機能していません。ホームではないコントローラでActionResultを呼び出す

マイJavascriptを(私の見解の上部のスクリプトタグ内):

$(document).ready(function() { 
    $('#somevalue').autocomplete({ 
     source: '@Url.Action("Tables/GetExpenseTypes")' 
    }); 
}) 

マイコントローラー:私が呼び出しを実行するたびに

public class TablesController : Controller 
{ 
    public ActionResult GetExpenseTypes(string term) 
    { 
     return Json(Blah); 
    } 
} 

、それは404 Not Foundエラーを返します。私は要求を見てみると、それは次のようになります。

http://localhost:56569/Home/Tables/GetExpenseTypes 

それが重要ならば、これは私のRouteConfig.csです:

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = 
    UrlParameter.Optional } 
); 

私の要求に関係なく、ホームコントローラに行きませんしたくない理由何?私はスラッシュとコントローラ/アクションの前にいる場合:それは違いはありません

$('#somevalue').autocomplete({ 
    source: '@Url.Action("/Tables/GetExpenseTypes")' 
}); 

を誤っ

Url.Actionヘルパーを使用しているため、要求はまだホームコントローラ

答えて

1

にルーティングされますあなたの現在のコードはthis overload

public virtual string Action(
    string actionName 
) 

を呼び出して、あなたはtとTables/GetExpenseTypesを渡しています彼はactionNameパラメータの値を返します。このアクションメソッドへのURLを構築するときにヘルパーメソッドは、あなたが使用する必要があるので、あなたは/Home/Tables/GetExpenseTypes

を得ている、コントローラとして現在のコントローラを使用するアクション名およびコントローラー名などを渡しthis overload

public virtual string Action(
    string actionName, 
    string controllerName 
) 

別のパラメータ

source: '@Url.Action("GetExpenseTypes","Tables")' 

正しいURLが生成されます。

+0

チャームのように働いた。ありがとう@Shyju – BKahuna

関連する問題