0

JavaScriptの動的文字列でURLHelp.RouteUrlを使用しようとしています。私はこのようにそれが欲しい-

function MyFun(action, param){
   var strPass = "MyController/" + action + "?param1=" + param;
   Windows.Location.href = "<%=Url.RouteUrl(" + strPass + ")%>";
}

それは動作しません。私は何かを逃したことがありますか?ASP.NET MVCで同様の方法で機能する別の方法はありますか?

ありがとう、

追加情報 -

アプリケーションに問題があるため、上記の方法を試します。を使用すると、メインページが"http://myserver/myapplicaiton/mycontroller/myaction"正しく返されます"Windows.Location.href ="MyController/MyAction"。しかし、ダブルコントローラーを持つ次のページが登場し"http://myserver/myapplication/mycontroller/mycontroller/myaction"ました。
このルーティングの問題の原因は何ですか?

4

4 に答える 4

3

これは機能しません。htmlページがブラウザに到達する前にRazor構文がレンダリングされます。Javascriptは後に実行されます。

したがって、ステップ1にステップ2を設定しようとしています。

   function MyFun(action, param){          
       Windows.Location ="/MyController/" + action + "?param1=" + param;
    }
于 2013-02-13T04:00:23.823 に答える
2

代わりにこのコードを試してください

   function MyFun(action, param){          
       Windows.Location.href ="/MyController/" + action + "?param1=" + param;
    }
于 2013-02-13T03:59:20.953 に答える
0

コードがサーバーを離れると、ビューにrazorコードを動的に追加することはできません...Razorはクライアントブラウザでコンパイルされません。

jQueryを使用して、URLを返すことを唯一の目的とするController /Actionに対して$.ajax()呼び出しを行うことができます。

public ActionResult GenerateUrlFromRoutingEngine(string ControllerName, string ActionName, string RouteValues) 
{
    var ctx = new HttpContextWrapper(HttpContext.Current);
    UrlHelper helper = new UrlHelper(
                           new RequestContext(ctx,
                           RouteTable.Routes.GetRouteData(ctx));
    var returnUrl = helper.Action(ControllerName,ActionName, RouteValues); //TODO: transform RouteValues to RouteValuesDictionary
    return Content(returnUrl);
}

$ .ajaxコールバックで、Windows.Location.href=response;を設定します。(このJavaScriptをかみそりの.cshtmlファイルに置くか、URLを直感的に渡す方法を見つけてください。)

function MyFun(action, param){
    $.ajax({
            type: "POST", 
            url: "@{Html.RouteLink("GenerateUrlFromRoutingEngine", "MyController")}",
            data: { ControllerName: 'MyController', ActionName: action, RouteValues: param },
            dataType: "text",
            success: function(response) { Windows.Location.href = response; }
            }
}
于 2013-02-13T04:02:43.357 に答える
0

私はURL全体を取得する関数に行き着きました-

関数FullURL(){

var app = "<%=HttpRuntime.AppDomainAppVirtualPath.ToString()%>";

if (app == "/")
    app = "";

return location.protocol+'//'+location.hostname+(location.port ? ':'+location.port: '') + app;

}

そして、それを-から呼び出します

 function MyFun(action, param){          
       Windows.Location =FullURL() + "/MyController/" + action + "?param1=" + param;
    }
于 2013-02-14T03:04:43.993 に答える