ActionLink显示错误的网址

时间:2015-09-18 13:23:56

标签: c# asp.net-mvc razor url-routing asp.net-mvc-routing

我在路由表中有一些预先定义的URL实际上指向同一个控制器和操作,但是语言不同。例如

            routes.MapRoute(
            "Contact", // Route name
            "contact", // URL with parameters
            new { controller = "Home", action = "Contact", lang="en" } // Parameter defaults
            );

            routes.MapRoute(
            "Contact2", // Route name
            "iletisim", // URL with parameters
            new { controller = "Home", action = "Contact", lang="tr" } // Parameter defaults
            );

当我在View中使用Html.ActionLink并运行应用程序时,URL显示第一条路线,例如:

@Html.ActionLink(Resources.Contact, "Contact", "Home")

当页面呈现的网址为tr时,当前语言为/contact,而/iletisim应为en

当我更改路由映射的顺序时,{{1}}语言页面显示错误的URL。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

匹配来自package com.app.rest; import com.squareup.okhttp.Response; import retrofit.GsonConverterFactory; import retrofit.Retrofit; import retrofit.RxJavaCallAdapterFactory; import retrofit.http.GET; import rx.Observable; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; public class TestApiClient { public interface Test { @GET("/posts") Observable<Response> getPosts(); } public TestApiClient() { new Retrofit.Builder() .baseUrl("http://jsonplaceholder.typicode.com") .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build().create(Test.class).getPosts().subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()).subscribe(new Subscriber<Response>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { e.toString(); } @Override public void onNext(Response response) { response.toString(); } }); } } 的路线时,必须考虑路线生成的所有参数。框架将始终返回所提供路径值的第一个匹配项。

在您的情况下,您提供路线值:

ActionLink

如果缺少其他信息,则与controller = "Home" action = "Contact" 路线(第一条路线Contact)相符。

如果您想匹配特定路线,则还需要传递controller = "Home", action = "Contact"路线值。

lang

这将匹配@Html.ActionLink(Resources.Contact, "Contact", "Home", new { lang = "tr" }, null) 路线。

或者,您可以将Contact2放入页面的网址中,这样可以确保它是当前请求的一部分,如ASP.NET MVC 5 culture in route and url 所示。然后,MVC会自动将此值提供给您的所有lang和其他基于ActionLinks的方法。