Как вы ссылаетесь на файлы .js, расположенные в папках View со страницы, используя Asp.net MVC - PullRequest
4 голосов
/ 17 сентября 2008

Например, если у меня есть страница, расположенная в Views / Home / Index.aspx, и файл JavaScript, расположенный в Views / Home / Index.js, как вы ссылаетесь на страницу aspx?

Пример ниже не работает, хотя компилятор говорит, что путь правильный

<script src="Index.js" type="text/javascript"></script>

Точно такая же проблема была опубликована здесь более подробно: http://forums.asp.net/p/1319380/2619991.aspx

Если это невозможно в настоящее время, будет ли это в будущем? Если нет, то как каждый управляет своими ресурсами javascript для крупных проектов Asp.net MVC? Вы просто создаете структуру папок в папке Content, которая отражает структуру папок View? YUCK!

Ответы [ 5 ]

3 голосов
/ 17 сентября 2008

Вы можете использовать метод VirtualPathUtility.ToAbsolute, как показано ниже, чтобы преобразовать относительный URL-адрес приложения файла .js в абсолютный, который можно записать на страницу:

<script type="text/javascript" src="<%=VirtualPathUtility.ToAbsolute("~/Views/Home/Index.js") %>"></script>
1 голос
/ 17 сентября 2008

Вот хороший метод расширения для HtmlHelper:

public static class JavaScriptExtensions
{
    public static string JavaScript(this HtmlHelper html, string source)
    {
        TagBuilder tagBuilder = new TagBuilder("script");
        tagBuilder.Attributes.Add("type", "text/javascript");
        tagBuilder.Attributes.Add("src", VirtualPathUtility.ToAbsolute(source));
        return tagBuilder.ToString(TagRenderMode.Normal);
    }
}

Используйте это так:

<%=Html.JavaScript("~/Content/MicrosoftAjax.js")%>
1 голос
/ 17 сентября 2008

Для общих ресурсов javascript использование папки Content имеет смысл. Проблема была в том, что я специально пытался решить, был javascript для aspx-страницы, который никогда не будет использоваться повторно.

Я думаю, что мне просто нужно сделать javascript, специфичный для aspx-страницы, прямо на самой странице и сохранить общие ресурсы js в папке Content.

1 голос
/ 17 сентября 2008

Вы должны иметь отдельную структуру папок для скриптов. Например, папка JavaScript в корне приложения. Хранение js-файлов с представлениями не только влияет на решение проблем с путями, но также влияет на безопасность и разрешения. Кроме того, в дальнейшем гораздо проще внедрить файлы JS в качестве ресурсов сборки, если в будущем вы решите развернуть некоторые части приложения отдельно, когда они будут храниться в отдельной подпапке.

0 голосов
/ 11 ноября 2011

Если вы перенаправите свои страницы в пользовательский RouteHandler, вы можете проверить наличие файлов перед обработкой RequestContext для класса MvcHandler.

Пример (не полный):

public class RouteHandler : IRouteHandler
{
    public IHttpHandler 
    GetHttpHandler(RequestContext requestContext)
    {
        var request = requestContext.HttpContext.Request;

        // Here you should probably make the 'Views' directory appear in the correct place.
        var path = request.MapPath(request.Path); 
        if(File.Exists(path)) {
            // This is internal, you probably should make your own version.
            return new StaticFileHandler(requestContext);
        }
        else {
            return new MvcHandler(requestContext);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...