Важный момент: данные получаю с сервера и мне нужно обновлять график, вызывая эту функцию через RegisterClientScriptBlock. Как мне лучше это осуществить?
Ещё проще - передавай данные прямо в RegisterClientScriptBlock. Формируй весь скрипт на сервере: string script = $"initializeChart({JsonConvert.SerializeObject(data)});"; и регистрируй его. Функция получит параметры напрямую, никаких ajax запросов не нужно. Пользуюсь так уже несколько лет - работает без проблем.
Чтобы RegisterClientScriptBlock работал, функция должна быть глобальной. Привяжи её к window: window.initializeChart = function() { ... }. На сервере делай так: ClientScript.RegisterClientScriptBlock(this.GetType(), "chartScript", "window.initializeChart();", true);. Главное - jQuery должен загрузиться раньше, иначе словишь ошибку. Я проверяю через $(document).ready() или проверяю существование jQuery перед вызовом.
Я бы сделал отдельный файл chart.js и подключил его к странице. Функция будет доступна везде без привязки к window. Использую RegisterStartupScript - он запускается после загрузки DOM, что безопаснее для jQuery. RegisterClientScriptBlock часто срабатывает слишком рано, когда #container ещё не готов.