2012-01-03 21 views
1

@ html.Actionlink()を使用して、別のコントローラのアクションにリダイレクトするリンクを作成します(ビューの元のコントローラではありません)。私は別のコントローラのビューからアクションへの値の受け渡し

をしないのです名前のSearchResultとの作用を有する名前オーダーステータスとコントローラを持っているものの

The resource cannot be found. 
Description: HTTP 404. The resource you are looking for (or one of its dependencies)  could have been removed, had its name changed, or is temporarily  unavailable. Please review the following URL and make sure that it is spelled correctly. 

Requested URL: /OrderStatus/SearchResult 

@Html.ActionLink(@orderNumber.ToString().Trim(), "SearchResult", "OrderStatus", @orderNumber.ToString(), new { target = "_self" }) 

が、ビューをクリックして上の

私は例外を取得しますいくつかの構文?

、検索結果方法:

[AcceptVerbs("POST")] 
public ActionResult SearchResult(FormCollection collection) 
    { 
     try 
     { 
      string orderNumber = collection["searchItem"].ToString(); 

      if (string.IsNullOrEmpty(orderNumber)) 
       return View("OrderStatusSearch"); 

      ////obtain sales oder header for paased order number 
      #region sales order header 
      orderNumber = orderNumber.Trim(); 

      ObjectParameter[] parameters = new ObjectParameter[1]; 
      parameters[0] = new ObjectParameter("OrderNumber", orderNumber); 

      var headerQuery = dbContext.ExecuteFunction<Models.SalesOrderHeader>("uspGetHeaderDetails", parameters); 

      Models.SalesOrderHeader salesOrderHeader = new Models.SalesOrderHeader(); 
      salesOrderHeader = headerQuery.SingleOrDefault(); 

      ////// return empty view if sales ordr header is null 
      if (salesOrderHeader == null) 
       return View("EmptySearch"); 
      #endregion 
      .................... 

      ////create sales order to be passed to view 
      #region Create Sales Order 
      { 
       Models.SalesOrder salesOrder = new Models.SalesOrder(); 

       salesOrder.salesOrderHeader = salesOrderHeader; 
       .................. 
       return View(salesOrder); 
      } 
      #endregion 
     } 
     catch (Exception e) 
     { 
      return View("EmptySearch"); 
     } 
    } 
+0

'SearchResult'メソッドの引数は何ですか? – hunter

+0

検索結果の定義方法を与えるために私のコードを編集しました – 14578446

+0

@hunter:ありがとうございました。あなたのコメントは役に立ちましたか? – 14578446

答えて

3

次試してください。

1)正しいHtml.ActionLinkオーバーロードを使用していますか?

あなたはHtml.ActionLink([リンクテキスト]、[アクション]、[コントローラ]、[ルート値]、[htmlAttributes])と、あなたがルート値のために与えてくれたすべてを期待しているオーバーロードを使用しています文字列です。これは、文字列だけでなく、RouteValueDictionaryまたは匿名オブジェクトである必要があります。下にこれを試してください、あなたは期待どおりに動作しますか?

@Html.ActionLink(@orderNumber.ToString().Trim(), "SearchResult", "OrderStatus", new{ id = @orderNumber.ToString() }, new { target = "_self" }) 

私はあなたはそれが999あなたが持っているものは何でもオーダー数であるなど/OrderStatus/SearchResult/999としてURLを生成したいと仮定します。これは正しいですか?

2) SearchResult ActionResultはPOSTのみを受け入れます。 ActionLinkによって生成されたハイパーリンクをクリックすると、GETになります。あなたがGETを受け入れるこれらの名前によるコントローラ/アクションを持っていないので、404が期待される結果です。

あなたActionLinkのは/OrderStatus/SearchResult[/order number]にポイントを生成したリンクは、適切な処置の方法は、(デフォルトのルーティング設定を仮定して)のように見えなければならない場合:

public ActionResult SearchResult(string orderNumber) { ... } 

あなたはこのアクションを望んでいた場合は、属性[HttpGet]を前に付けできのみがGETを許可しますが、これは必須ではありません。

0

あなたはコードをリンクが間違っている、一つまたは二つのもの間違っているがあるかもしれないように見えます

@Html.ActionLink("NameToBeDisplayed", "SearchResult", "OrderStatus", new { yourParameter = @OrderNumber.ToString() }) 
+0

が機能しない、ルートパスが正しく解決されていない – 14578446

関連する問題