Параметры ActionResult пусты [дубликат]

Контейнеры Python содержат ссылки на другие объекты. См. Этот пример:

>>> a = []
>>> b = [a]
>>> b
[[]]
>>> a.append(1)
>>> b
[[1]]

В этом b есть список, содержащий один элемент, который является ссылкой на список a. Список a изменен.

Умножение списка на целое эквивалентно добавлению списка к себе несколько раз (см. операции общей последовательности ). Итак, продолжаем с примера:

>>> c = b + b
>>> c
[[1], [1]]
>>>
>>> a[0] = 2
>>> c
[[2], [2]]

Мы видим, что список c теперь содержит две ссылки на список a, который эквивалентен c = b * 2.

Python FAQ также содержит объяснение этого поведения: Как создать многомерный список?

11
задан user482184 19 May 2014 в 17:55
поделиться

1 ответ

Насколько я знаю, вы не можете передать сложный объект напрямую, но вы можете избежать необходимости сами строить строку запроса, передав RouteValueDictionary:

@Html.ActionLink("Edit", "Edit", new RouteValueDictionary {
    {"SearchSortPageParams.SortOrder", evm.SearchSortPageParams.SortOrder },
    { /* etc... */ }
})

. Это должно генерировать строка запроса по мере необходимости.

Единственной альтернативой было бы использование отражения для итерации по свойствам модели и генерации этого словаря таким образом, но это, на мой взгляд, было бы чрезмерно спроектировано.

Конечно, я бы вообще предложил в этой ситуации, что у вас просто есть ваш метод действий, который принимает отдельные параметры:

public ActionResult Search(string searchString, SortOrder sortOrder, ...)

Я обычно считаю это более подходящим способом передать параметры GET методу (конечно, это может стать громоздким, если у вас много параметров). Затем вы можете просто сделать следующее, что намного более аккуратно:

@Html.ActionLink("Edit", "Edit",
    new { sortOrder = evm.SearchSortPageParams.SortOrder, ... })
9
ответ дан Ant P 20 August 2018 в 22:31
поделиться
  • 1
    Пошел с RouteValueDictionary, он по крайней мере лучше, чем строка необработанного запроса :-) Спасибо. – user482184 20 May 2014 в 13:30
Другие вопросы по тегам:

Похожие вопросы: