2014-11-19 11 views
7

उदाहरण कोड: दृश्य स्टूडियो में एक MVC 5 परियोजना में, मैं निम्नलिखित नियंत्रक और विचारों की स्थापना की है:विनीत AJAX त्रुटि: "Uncaught ReferenceError: Sys परिभाषित नहीं है"

नियंत्रक

TestController.cs

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

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

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

दृश्य

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> 

प्रश्न

यदि मैं सही ढंग से समझ गया हूं, तो "आंशिक 1" पर क्लिक करके HTML सामग्री में "PartialView1" की सामग्री को "contentShouldLoadHere" की आईडी के साथ लोड करना चाहिए। इसके बजाय, क्लिक "आंशिक 1" MyPartialView1 कार्रवाई (~/Test/MyPartialView1) का एक सामान्य पेज लोड का कारण बनता है, और क्रोम देव उपकरणों कंसोल में मैं निम्न JavaScript त्रुटि मिलती है:

Uncaught ReferenceError: Sys is undefined 

किसी को भी पता है कि ऐसा क्यों है, और कैसे मैं इसे ठीक कर सकते हैं

नोट्स - मैं क्रोम देव उपकरण है कि दोनों लिपियों ठीक से लोड किया जा रहा है के माध्यम से की पुष्टि की है - @Ajax सहायक द्वारा उत्पन्न लिंक का HTML है:।

<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

आप एचटीएमएल को Partial 1 'जैसा दिखना चाहिए यहाँ अजीब अजीब –

+0

क्या आपके पास कोई अन्य स्क्रिप्ट लोड है। मुझे लगता है कि इस मार्कअप का इस्तेमाल 'माइक्रोसॉफ्टएमवीसीएजेक्स.जेएस' –

+0

@ स्टीफन म्यूके नोप के साथ किया गया था। मेरे असली पृष्ठ में मैं करता हूं, लेकिन जिस नमूना पृष्ठ का मैं प्रयोग कर रहा हूं, उनमें केवल उन स्क्रिप्ट शामिल हैं, आउटपुट बिल्कुल ठीक है, जैसा कि सहायक फ़ाइल के अपवाद के साथ व्यू फ़ाइल में दिखाया गया है। –

उत्तर

22

यदि आपके लिए अविभाज्य जावास्क्रिप्ट अक्षम कर दिया गया है तो लिंक के लिए उत्पन्न होने वाला HTML उत्पन्न होता है। आप

@{HtmlHelper.UnobtrusiveJavaScriptEnabled = true;} 

साथ या आवेदन (web.config में)

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

आपका गाया एचटीएमएल के साथ के लिए ध्यान में रखते हुए इसे सक्षम तो जैसे

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

दिखना चाहिए कर सकते हैं और साथ काम करेंगे jquery.unobtrusive-ajax.js फ़ाइल

+2

आप ग्लोबल.एएसएक्स सीएस में भी 'HtmlHelper.UnobtrusiveJavaScriptEnabled = true;' डाल सकते हैं। –

संबंधित मुद्दे