2017-11-20 10 views
1

routeValuesが指定されていないアクションリンクがあり、routeValueでそのページをロードすると、指定されたMVCがアクションリンクを正しく書き出しません。routeValueがロードされていないactionlinkがあり、routeValueが動的ページを中断しています

私もURLを指定ところ、このようなルーティングMVC属性とまったく同じバグがあった

:私はescpeciallyそれがrouteValueによってロードされる動的なコンテンツページを壊すこれで問題があった[Route("reviews/{reviewId}")]

を同じページ上の動的アクション結果を指す複数のアクションリンクがある場合に発生します。

ここに例があります。なぜこれが起こっているのか、問題を解決する方法を誰もが説明できますか?私は、MVCのバグであると感じています。実際、このページは私には予想外の動作をしています。

アクション結果(そのデフォルトのコンテンツページへのデフォルト一切idが提供されていない場合):レイアウト上の

public ActionResult Index(string id) 
     { 
      if (id == "" || id == null) { 
       id = "About-Us"; 
      } 
      ContentPage cp = LookupContentPage(id); 
      return View(cp); 
     } 

アクションリンク/ページ

<ul class="nav navbar-nav"> 
    <li>@Html.ActionLink("About Us", "Index", "Home")</li> 
    <li>@Html.ActionLink("Terms and Conditions", "Index", "Home", new { id = "Terms and Conditions" }, null)</li> 
    <li>@Html.ActionLink("User Stories", "Index", "Home", new { id = "User Stories" }, null)</li> 
</ul> 

が今ここにあるようにする方法バグ。アンカータグは次のようにロードする最初のページロードで:

<ul class="nav navbar-nav"> 
    <li><a href="/">About-Us</a></li> 
    <li><a href="/Home/Index/Terms%20and%20Conditions">Terms and Conditions</a></li> 
    <li><a href="/Home/Index/User%20Stories">User Storeies</a></li> 
</ul> 

これは私が期待していないIDが提供されている場合、それは私のデフォルト値を実装した結果です。ただし、IDを含むページの1つに移動した後。あなたはそれが私が意図的にIDなしで、空白のままにしているアクションリンクをブロッケンた見ることができるように

<ul class="nav navbar-nav"> 
    <li><a href="/Home/Index/User%20Stories">About Us</a></li> 
    <li><a href="/Home/Index/Terms%20and%20Conditions">Terms and Conditions</a></li> 
    <li><a href="/Home/Index/User%20Stories">User Stories</a></li> 
</ul> 

http://localhost:57722/Home/Index/User%20Stories

このようなNAVのロード:だからあなたのURLは次のようになります場合、そのため、デフォルト値が読み込まれるはずですが、アクションリンクで指定していない独自のURLが書き込まれています。私はこれがMVCのバグだと感じています。あなたが動的なページを持っていなくても、defualtなどでデフォルトしていても、私はそれがブロークンであるという事実が、アクションリンクを間違って書くという事実を感じます。

ユーザーがIDを空白のままにして、同じビューを返す別のActionResultに動的コンテンツをロードすると、デフォルトページの別のActionResultを作成してこの問題を解決しました。

EDIT 1

私はコメントで示唆されたようrouteValuesにNULLを追加して、それがまだ破壊されています

<li>@Html.ActionLink("About Us", "Index", "Home", null,null)</li> 

        <li>@Html.ActionLink("Terms and Conditions", "Index", "Home", new { id = "Terms and Conditions" }, null)</li> 
        <li>@Html.ActionLink("User Stories", "Index", "Home", new { id = "User Stories" }, null)</li> 
アウトはとのリンクに移動した後、次のようになります

routeValue

<ul class="nav navbar-nav"> 
        <li><a href="/Home/Index/Terms%20and%20Conditions">About Us</a></li> 

        <li><a href="/Home/Index/Terms%20and%20Conditions">Terms and Conditions</a></li> 
        <li><a href="/Home/Index/User%20Stories">User Stories</a></li> 
       </ul> 
+0

私はあなたの問題を完全に理解していません。しかし、あなたはいつでも 'null'ルート値を渡すことで、url/model状態辞書からは使用しないようにすることができます。 – Shyju

+0

@Shyju私はちょうど質問で行った編集をご覧ください。明示的にヌルを書いているのは依然として壊れている。 – Harry

答えて

2

デフォルトルートをsegmenで使用しているため、ルート値が追加されますtはid値(例: url: {controller}/{action}/{id})。この動作は設計上のものであり、URLを生成するすべての方法(例:Html.BeginForm()も同じです)です。

ルート値を除去するために、あなたは、引数としてnullを使用するとがデフォルト値を使用することを意味していることnew { id = "" }

@Html.ActionLink("About Us", "Index", "Home", new { id = "" }, null) 

注意を使用することができます。

@Html.ActionLink("About Us", null, null, new { id = "" }, null) 
関連する問題