2017-05-23 10 views
1

私はHTMLでアクションリンクを持っています。コントローラでRouteconfigでカスタマイズされたURLを表示する方法

<a href="@Url.Action("UserWisedPost", "Blog", new { userName = item.UserName,userId=item.UserId })">@item.UserName</a> 

public ActionResult UserWisedPost(string userId,string userName, int? page, int pageSize = 10) 
{ 
    page = page == null || page == 0 ? 1 : page; 
    var model = _post.GetByUserId(userId).ToPagedList((int)page, pageSize); 
    return View(model); 
} 

そしてRouteConfig

routes.MapRoute(
       name: "userwisedPost", 
       url: "{controller}/{action}/{userName}", 
       defaults: new { controller = "Blog", action = "UserWisedPost", userName=UrlParameter.Optional} 
      ); 

にあなたが私の言いたいことはおそらく理解しています。私は../UserWisedPost/userNameのようなURLを表示したいが、コントローラにはuserIdでアクセスするデータが必要です。

どうすればいいですか?

+0

これで、あなたは '../UserWisedPost/userName?userId = 123'のようなものになりましたか?もしそうなら、問題は何ですか? –

+0

あなたのコントローラーのアクションは 'userName'を入力とし、アクションメソッドでこれを' userId'に変換する方法が必要です。あるいは、 '_post'を変更して、' userName'によって投稿を取り出すことができます。しかし、私たちはあなたのバックエンドがどのように構造化されているかわからないので、誰もあなたの問題に正確な答えを与えることはできません。 –

+0

私はユーザーIDを表示したくありません。しかし、コントローラでは、私はユーザーIDでデータにアクセスしたいです – orbit

答えて

1

ここでの問題は、デフォルトルートが優先されていることです。

私はあなたのカスタムルートの前にこれを持って推測している:

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

あなたがそうでなければ、これはあなたのBlogControllerへのリクエストを処理するルートになり、この1の前に、カスタムルートを必要とします。

routes.MapRoute(
      name: "userwisedPost", 
      url: "Blog/{action}/{userName}", 
      defaults: new { controller = "Blog", action = "UserWisedPost", userName = UrlParameter.Optional } 
     ); 

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

これは、このようなURLになります:これを解決する

簡単な方法は、このようなものになるだろうBlog/UserWisedPost/SomeUserName?userId=someUserId

+0

私はurlにuseridを表示したくありません。しかしコントローラでは、ユーザーIDでデータにアクセスしたいと思っています – orbit

+0

url-parameterとして渡す場合は、userIdを表示する必要があります。 – Robban

+0

唯一の他の方法は、フォームを使用して値をPOSTすることです。それから彼らは現れませんが、それはアンカーではなく、提出するフォームです。 – Robban

1

あなたは、クエリ文字列以外userId他を持っているしたい場合は、すべきフォームを追加し、それを隠しフィールドにします。

それとも、あなたがデータをポストするためにAJAXを使用することができます。

<a href="postUserWised(@Url.Action("UserWisedPost", "Blog"), @item.UserName,@item.UserId)">@item.UserName</a> 

は、そのビュー内のスクリプトのセクションで:

@section scripts { 
<script type="text/javascript"> 
    function postUserWised(url, userName, userId) { 
     $.ajax({ 
     url: url, 
     type: POST, 
     data: { userName: userName, userId: userId }, 
     success: function(data) { }, 
     error: function(...) { } 
     }); 
    } 
</script> 
} 

私はこれをテストしていませんが、それはであなたを指している必要があります正しい方向。

関連する問題