2012-01-03 2 views
1

@ html.Actionlink()를 사용하여 다른 컨트롤러 (보기가있는 원래 컨트롤러가 아닌)의 동작으로 리디렉션되는 링크를 작성합니다. 내가다른 컨트롤러의 동작에서보기로 값 전달

실종 이름 의 SearchResult과 작용을 갖는 이름 OrderStatus와 컨트롤러가 있지만

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" }) 

하지만보기 클릭에

나는 예외가 몇 가지 구문?

의 SearchResult 방법 :

[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

@ 헌터 : 감사합니다. 귀하의 의견에 대한 질문이 도움이 될만한 것보다 많습니다. – 14578446

답변

3

을 다음보십시오.

1) 올바른 Html.ActionLink 오버로드를 사용하고 있습니까?

당신은 ([htmlAttributes], [링크 텍스트], [액션], [컨트롤러], [경로 값]) Html.ActionLink를 기대하고 과부하를 사용하고 모두 당신이 경로 값을 준 문자열입니다. 이것은 문자열 일뿐만 아니라 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을 허용하는이 이름의 Controller/Action이 없으므로 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

관련 문제