2012-01-03 238 views
1

我正在使用@ html.Actionlink()構建一個鏈接,該鏈接重定向到另一個控制器中的動作(不是具有視圖的原始控制器)下面是我的聲明。將值從一個視圖傳遞到另一個控制器中的動作

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

但點擊查看我得到一個異常:

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 

雖然我已經與具有名稱信息搜索結果的動作名稱OrderStatus控制器

我失去了一些語法?

信息搜索結果的方法:

[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 2012-01-03 17:56:36

+0

已編輯我的代碼給搜索結果方法的定義 – 14578446 2012-01-03 18:33:01

+0

@hunter:謝謝你,你的評論問題更有幫助:) – 14578446 2012-01-03 18:53:20

回答

3

它看起來像有可能是一個或兩個錯誤。

1)您確定使用正確的Html.ActionLink超負荷?

您正在使用期望Html.ActionLink([link text],[action],[controller],[route values],[htmlAttributes])的所有重載以及路由值是一個字符串。這需要是一個RouteValueDictionary或一個匿名對象,而不僅僅是一個字符串。試試下面,這是否如你所期望的那樣工作?

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

我想,你希望它來生成URL,例如/OrderStatus/SearchResult/999,其中999是你擁有的任何訂單號碼。這是正確的嗎?

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 2012-01-03 18:40:38

相關問題