Причины, по которым веб-ресурсы не могут быть найдены

StackOverflow https://stackoverflow.com/questions/1628695

  •  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 , и вы сказали, что все остальное после ваших правил предоставляет вам домашнюю страницу.Не очень умно с моей стороны тратить на это час или два впустую!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top