Из этого выпуска ( https://github.com/jupyter-widgets/ipywidgets/issues/1775 ) похоже, что выходные данные функции должны быть захвачены в выходном виджете. См. Пример Джейсона Грута:
import ipywidgets as widgets
out = widgets.Output()
def on_value_change(change):
with out:
print(change['new'])
slider = widgets.IntSlider(min=1, max=100, step=1, continuous_update=True)
play = widgets.Play(min=1, interval=2000)
slider.observe(on_value_change, 'value')
widgets.jslink((play, 'value'), (slider, 'value'))
widgets.VBox([play, slider, out])
Чтобы избежать бокса , лучший способ сравнить универсальные шаблоны на предмет равенства - использовать EqualityComparer
. Это касается IEquatable
(без бокса), а также object.Equals
и обрабатывает все Nullable
«приподнятые» нюансы. Следовательно:
if(EqualityComparer<T>.Default.Equals(obj, default(T))) {
return obj;
}
Это будет соответствовать:
Nullable
На самом деле выходные данные двух методов одинаковы, но генерируются несколько разными способами:
Html.ActionLink ()
упрощает быстрое создание ссылок ActionLink, и даст вам базовый контроль над тем, что отображается. Если у вас не слишком много маршрутов или вам не нужно предоставлять слишком много или слишком конкретную информацию, это будет работать нормально.
Метод Html.RouteLink ()
занимает немного времени различные аргументы, и, таким образом, дает вам немного более подробный контроль над тем, как обрабатываются вещи. Я обычно использую этот метод, когда мой сценарий немного сложнее, или когда у меня есть более подробная структура маршрута.
Одним из примеров является недавний проект, в котором у меня (для гибкости) было несколько разных маршрутов, которые все были довольно простыми, чем один сложный, который позволял бы получить много информации. Таким образом, я получил четыре или пять маршрутов для одного и того же контроллера, все с указанным действием по умолчанию. Я в основном использовал версию RouteLink
, потому что, когда я указывал имя маршрута, параметры по умолчанию вводились автоматически.
Используйте их по своему усмотрению и так, как они имеют смысл для вашего проекта. На самом деле нет ни плюсов, ни минусов ни у одного из них (чего нет у некоторых других ...).
В дополнение к другим приведенным здесь ответам RouteLink немного быстрее и не может найти неправильный маршрут, потому что вы изменили свой таблица маршрутизации.
RouteLink takes the name of a route, so if your route names are reliable and fairly unique then this will be the same even if the action name to be used changes. ActionLink links to a specific action of a specific controller instead. I use both in my views, depending on what kind of link I'm after!