yield
, точно так же, как return
- это возвращает то, что Вы говорите ему (как генератор). Различие - то, что в следующий раз Вы называете генератор, выполнение запускается от последней возможности до yield
оператор. В отличие от возврата, не очищен стековый фрейм, когда урожай происходит, однако управление возвращено вызывающей стороне, таким образом, его состояние возобновится в следующий раз, когда функция вызвана.
В случае Вашего кода, функция get_child_candidates
действует как итератор так, чтобы при расширении списка это добавило один элемент за один раз к новому списку.
list.extend
вызовы итератор, пока это не исчерпывается. В случае примера кода Вы отправили, это будет намного более ясно просто возвратить кортеж и добавить это к списку.
Возможно, вам придется вернуться к выполнению чего-то вроде:
<a href="<%= Url.Action("action") %>">f<br />last</a>
А затем вручную подключить биты Ajax.
Попробуйте следующее:
<%= Ajax.ActionLink("f<br />lastname", ...more stuff
Вы не можете использовать
, потому что метод ActionLink (и действительно, я считаю, что все методы расширения html и ajax) кодируют строку. Таким образом, результат будет примерно таким:
<a href="...">f<br />lastname</a>
Вместо этого вы могли бы попробовать форматирование:
<%= string.Format(Ajax.ActionLink("f{0}lastname", ...more stuff), "<br />") %>
\ n
раньше работал на меня. Но теперь он кажется обесцененным. В качестве альтернативы вы можете использовать метод NewLine, например:
string jay = "This is a" + Environment.NewLine + "multiline" + Environment.NewLine + "statement";
Как насчет:
<%= Server.UrlDecode(Ajax.ActionLink(Server.UrlEncode("f<br/>lastname"), ...more stuff