2016-08-05 4 views
2

Я создал частичный вид «_Test1» в mvc 4.0.Как загрузить javascript с частичного просмотра

enter image description here

С помощью контроллера я звоню мой частичный вид.

private ActionResult MyView() 
{ 
    return PartialView("_Test1"); 
} 

Когда я отладки я не получаю ошибку, я предполагаю, что мой частичный вид был успешно загружен через контроллер. Теперь с помощью этого частичного представления я должен вызвать javascript. Который дает мне ошибку "Неожиданный символ '$'". Пожалуйста, обратитесь он скриншот ниже: -

enter image description here

Может кто-то помочь?

+1

'' $ для JQuery Я pressumed. Пожалуйста, добавьте библиотеку jquery в свой основной вид – Sherlock

+0

Это может вам помочь, http://stackoverflow.com/questions/885990/linking-javascript-libraries-in-user-controls/886184#886184 –

+0

Спасибо Smit за то, что поделился мной ссылкой .. Это сработало .. – user3106445

ответ

0

Я бы определенно посоветовал не вводить их в частичные части по той причине, о которой вы говорите. Существует высокая вероятность того, что один вид может вывести две частичные части, которые имеют ссылки на один и тот же файл js. Вы также получили удар по загрузке js перед загрузкой остальной части html.

Я не знаю о передовой практике, но я хочу включить любые общие файлы js внутри главной страницы, а затем определить отдельный ContentPlaceHolder для некоторых дополнительных файлов js, которые относятся к определенному или небольшому числу просмотров.

Вот пример главной страницы - это очень понятно.

<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %> 
<head runat="server"> 
    ... BLAH ... 
    <asp:ContentPlaceHolder ID="AdditionalHead" runat="server" /> 
    ... BLAH ... 
    <%= Html.CSSBlock("/styles/site.css") %> 
    <%= Html.CSSBlock("/styles/ie6.css", 6) %> 
    <%= Html.CSSBlock("/styles/ie7.css", 7) %> 
    <asp:ContentPlaceHolder ID="AdditionalCSS" runat="server" /> 
</head> 
<body> 
    ... BLAH ... 
    <%= Html.JSBlock("/scripts/jquery-1.3.2.js", "/scripts/jquery-1.3.2.min.js") %> 
    <%= Html.JSBlock("/scripts/global.js", "/scripts/global.min.js") %> 
    <asp:ContentPlaceHolder ID="AdditionalJS" runat="server" /> 
</body> 

Html.CSSBlock & Html.JSBlock, очевидно, мои собственные расширения, но опять же, они сами за себя в том, что они делают.

Тогда в сказать SignUp.aspx вид я бы

<asp:Content ID="signUpContent" ContentPlaceHolderID="AdditionalJS" runat="server"> 
    <%= Html.JSBlock("/scripts/pages/account.signup.js", "/scripts/pages/account.signup.min.js") %> 
</asp:Content> 

HTHS, Чарльз

Ps. Вот следить за вопрос, я спросил о Минимизация и конкатенации JS файлы: Объединить & Минимизировать JS на лету или во время сборки - ASP.NET MVC

EDIT: В соответствии с просьбой на мой другой ответ, моя реализация .JSBlock(a, b) в соответствии с просьбой

public static MvcHtmlString JSBlock(this HtmlHelper html, string fileName) 
{ 
    return html.JSBlock(fileName, string.Empty); 
} 

public static MvcHtmlString JSBlock(this HtmlHelper html, string fileName, string releaseFileName) 
{ 
    if (string.IsNullOrEmpty(fileName)) 
     throw new ArgumentNullException("fileName"); 

    string jsTag = string.Format("<script type=\"text/javascript\" src=\"{0}\"></script>", 
           html.MEDebugReleaseString(fileName, releaseFileName)); 

    return MvcHtmlString.Create(jsTag); 
} 

А потом, где происходит волшебство ...

public static MvcHtmlString MEDebugReleaseString(this HtmlHelper html, string debugString, string releaseString) 
    { 
     string toReturn = debugString; 
#if DEBUG 
#else 
     if (!string.IsNullOrEmpty(releaseString)) 
      toReturn = releaseString; 
#endif 
     return MvcHtmlString.Create(toReturn); 
    } 
+3

Не копируйте напрямую http://stackoverflow.com/questions/885990/linking-javascript-libraries-in-user-controls/886184#886184, скорее, вы можете поместить ссылку ответа в комментарий –

+0

Написание ссылки может не помочь другим зрителям напрямую – Lakhtey

+1

Но этот код совершенно не нужен здесь, это помогает? –