Причины, по которым веб-ресурсы не могут быть найдены
-
06-07-2019 - |
Вопрос
Привет, у меня возникли проблемы с запуском встроенного js-файла.
Я перепробовал все следующие:
- Запущенный сервер разработки Cassini (VS2008, .NET 3.5)
- Добавленный [сборка:WebResource("MyNamespace.MyScriptFile.js ", "текст/javascript")] над объявлением пространства имен класса.
- Файл сценария имеет действие сборки "Встроенный ресурс".
- Пробовал регистрироваться во время OnInit, OnLoad и OnPreRender
- Файл сценария находится в той же сборке и пространстве имен, что и элемент управления, регистрирующий его.
- Открыл сборку с помощью Reflector и проверил правильность названия ресурса.
Не работает ни с одним из следующих методов:
ScriptManager.RegisterClientScriptResource(Page, GetType(), "MyNamespace.MyScriptFile.js"); Page.ClientScript.RegisterClientScriptResource(GetType(), "MyNamespace.MyScriptFile.js"); Page.ClientScript.RegisterClientScriptInclude(GetType(), "key", Page.ClientScript.GetWebResourceUrl(GetType(), "MyNamespace.MyScriptFile.js"));
- Найдены другие файлы WebResource.axd - только этот не найден.
Запрос к ресурсу возвращает страницу 404 с перечисленным исключением: "*[HttpException]: This is an invalid webresource request.*"
Использование ScriptManager.RegisterClientScriptResource создает исключение:
"*Web resource 'MyNamespace.MyScriptFile.js' was not found.*"
Решение
Попробуйте реализовать свой собственный ScriptManger, а затем добавить встроенный файл оттуда.Вот пример
public class MyScriptManager : System.Web.UI.ScriptManager
{
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
RegisterClientScriptResource(this, typeof(ScriptManagerExtension), "MyNamespace.MyScriptFile.js");
}
}
Другие советы
В вашем примере кода вы выполняете вызов GetType() ...тип используется в качестве отправной точки для поиска.В зависимости от того, где вы выполняете свой вызов GetType(), вы можете получить обратно не то, что ожидаете.Поскольку ASP.NET динамически компилирует типы для ваших страниц и пользовательских элементов управления, GetType() может возвращать тип, определенный в новой сборке, созданной ASP.NET.
Вместо этого вы могли бы попробовать выполнить typeof(SomeType) , где SomeType подходит в зависимости от местоположения вашего ресурса (например.тип элемента управления, с которым вы работаете).
может быть, ваш файл ресурсов расположен внутри папок в проекте?если это так, вам следует указать другую строку имени / местоположения в сборке и при регистрации скрипта
Page.ClientScript.RegisterClientScriptResource(GetType(), "MyNamespace.Folder1.Folder2.MyScriptFile.js");
[assembly: WebResource("MyNamespace.Folder1.Folder2.MyScriptFile.js", "text/javascript")]
обычно это распространенная проблема
Альтернативная причина этой проблемы - вы слишком жестко обращались со своим Global.asax , и вы сказали, что все остальное после ваших правил предоставляет вам домашнюю страницу.Не очень умно с моей стороны тратить на это час или два впустую!