2012-01-03 3 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, имеющим действие с именем SEARCHRESULT

я упускаю некоторый синтаксис?

метод 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

@hunter: спасибо, ваш комментарий был более чем полезен :) – 14578446

ответ

3

Похоже, что может быть один или две вещи неправильно.

1) Вы уверены, что используете правильную пересылку Html.ActionLink?

Вы используете перегрузку, которая ожидает Html.ActionLink ([текст ссылки], [действие], [контроллер], [значения маршрута] [htmlAttributes]), и все у вас приведены для значений маршрута это строка. Это должен быть RouteValueDictionary или анонимный объект, а не только строка. Попробуйте это ниже, работает ли это так, как вы ожидаете?

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

Я предполагаю, что вы хотите, чтобы генерировать URL, такие как /OrderStatus/SearchResult/999, где 999 является то, что номер заказа у вас есть. Это правильно?

2) Ваш поискРезультат ActionResult принимает только POST. Нажав на гиперссылку, сгенерированную ActionLink, вы получите GET. Поскольку у вас нет Controller/Action этими именами, которые принимают 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

Смежные вопросы