передать значения из представления в действие в другом контроллере - PullRequest
1 голос
/ 03 января 2012

Я использую @ 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

Мне не хватает синтаксиса?

метод поиска результата:

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

Ответы [ 2 ]

3 голосов
/ 04 января 2012

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

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

Если ссылка, которую генерирует ваш ActionLink, указывает на /OrderStatus/SearchResult[/order number], то соответствующий метод действия должен выглядеть следующим образом (при условии конфигурации маршрутизации по умолчанию):

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

Вы можете добавить его к атрибуту [HttpGet], если хотите, чтобы это действие только разрешало GET, но это не обязательно.

0 голосов
/ 03 января 2012

Вы указали неправильный код ссылки, попробуйте следующий

@Html.ActionLink("NameToBeDisplayed", "SearchResult", "OrderStatus", new { yourParameter = @OrderNumber.ToString() })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...