2014-11-19 23 views
7

Przykładowy kod: w projekcie w Visual Studio MVC 5, mam skonfigurować następujące kontroler i widoki:Dyskretna błąd AJAX: "Uncaught ReferenceError: Sys nie jest zdefiniowana"

Controller

TestController.cs

public class TestController : BaseController 
{ 
    public ActionResult Index() 
    { 
     return View("Index"); 
    } 

    public PartialViewResult MyPartialView1() 
    { 
     return PartialView("PartialView1"); 
    } 

    public PartialViewResult MyPartialView2() 
    { 
     return PartialView("PartialView2"); 
    } 
} 

Odwiedzin

Index.cshtml

@{ 
    Layout = null; 
} 

<!DOCTYPE html> 

<html> 
<head> 
    <script src="@Url.Content("~/Scripts/jquery-2.1.1.min.js")"></script> 
    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")"></script> 
</head> 
<body> 
    <h1>Testing Unobtrusive AJAX</h1> 
    @Ajax.ActionLink("Partial 1", "MyPartialView1", "Test", 
       new AjaxOptions() { UpdateTargetId = "contentShouldLoadHere", InsertionMode = InsertionMode.Replace }) 
    | 
    @Ajax.ActionLink("Partial 2", "MyPartialView2", "Test", 
       new AjaxOptions() { UpdateTargetId = "contentShouldLoadHere", InsertionMode = InsertionMode.Replace }) 
    <div id="contentShouldLoadHere"> 
     <p>This will get replaced.</p> 
    </div> 
</body> 
</html> 

PartialView1.cshtml

<h1>Test 1</h1> 

PartialView2.cshtml

<h1>Test 2</h1> 

Pytanie

Jeśli dobrze zrozumiałem, kliknięcie "Partial 1" powinno załadować zawartość "PartialView1" do elementu HTML z identyfikatorem "contentShouldLoadHere". Zamiast kliknięciu „Partial 1” powoduje normalne strona załadowała działań MyPartialView1 (~/Test/MyPartialView1), aw konsoli dev narzędzi Chrome pojawia się następujący błąd JavaScript:

Uncaught ReferenceError: Sys is undefined 

Czy ktoś wie dlaczego tak jest i jak ja można to naprawić

Uwagi - mam potwierdzone poprzez Chrome Dev Narzędzia że oba skrypty zostały prawidłowo załadowany - HTML dla łącza generowanych przez pomocnika @Ajax jest:?.

<a href="/Test/MyPartialView1" onclick="Sys.Mvc.AsyncHyperlink.handleClick(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, updateTargetId: &#39;contentShouldLoadHere&#39; });">Partial 1</a> 
+0

You html powinien wyglądać jak "Partial 1" tak, więc tak dziwne tutaj –

+0

Czy masz załadowane inne skrypty? Myślę, że ten znacznik był używany z 'MicrosoftMvcAjax.js' –

+0

@StephenMuecke nope. Na mojej prawdziwej stronie robię, ale strona próbna, którą eksperymentuję, zawiera tylko te skrypty, dane wyjściowe są dokładnie takie, jak pokazano w pliku View, z wyjątkiem kodu HTML generowanego przez helpera. –

Odpowiedz

22

Html generowanie linku jest generowane, jeśli dyskretny javascript został wyłączony. Można włączyć go w widoku z

@{HtmlHelper.UnobtrusiveJavaScriptEnabled = true;} 

lub aplikacji (w web.config) z

<configuration> 
    <appSettings> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 

swojej renderowane html powinien następnie wyglądać

<a data-ajax="true" data-ajax-mode="replace" data-ajax-update="#contentShouldLoadHere" href="/Test/Partial1">Partial 1</a> 

i będzie współpracować z jquery.unobtrusive-ajax.js plik

+2

Możesz wstawić 'HtmlHelper.UnobtrusiveJavaScriptEnabled = true;' również w Global.asax.cs. –

Powiązane problemy