2013-03-21 8 views
6

लौटने पर मुझे Ajax.ActionLink पर क्लिक करते समय 500 आंतरिक सर्वर त्रुटि मिल रही है। मेरे पास एक प्रोफाइल पेज है जो कई आंशिक रूप से बना है। प्रत्येक आंशिक अजाक्स सर्वर को उस विशिष्ट आंशिक से संबंधित उपयोगकर्ता जानकारी के संपादन की अनुमति देने के लिए कहते हैं।एमवीसी 4 - अजाक्स.एक्शनलिंक() 500 आंतरिक सर्वर त्रुटि

मैंने कहा कि कार्यक्षमता के साथ 3 आंशिक लागू किए गए हैं जो ठीक काम करते हैं। जिस पर मैं काम कर रहा हूं, शुरुआत में अपलोड की गई छवियों की एक सूची दिखाना चाहिए - यदि उपयोगकर्ता ने कोई छवि अपलोड नहीं की है तो Ajax.ActionLink पहले उल्लिखित दिखाया जाएगा, जो क्लिक होने पर उपयोगकर्ता को आंशिक रूप से लाया जाएगा जो छवि अपलोड करने में सुविधा प्रदान करता है।

enter image description here

यहाँ प्राप्त है और पोस्ट ActionResults:

यहाँ मैं क्रोम में दिखाई दे रही है जब मैं लिंक मारा है

// 
    // GET: /Tenants/TenantUploadReference 

    [HttpGet] 
    public ActionResult TenantUploadReference() 
    { 
     try 
     { 
      var currentTenant = tenantRepository.GetLoggedInTenant(); 
      if (currentTenant.ReferencePhotos == null) 
      { 
       currentTenant.ReferencePhotos = currentTenant.ReferencePhotos ?? new List<ReferencePhoto>(); 
      } 
      return PartialView("_TenantUploadReferencePartial", currentTenant.ReferencePhotos.ToList()); 
     } 
     catch (Exception e) 
     { 
      ModelState.AddModelError("", e); 
      return View(); 
     } 
    } 

    // 
    // POST: /Tenants/TenantUploadReference 

    [HttpPost] 
    public ActionResult TenantUploadReference(HttpPostedFileBase file, Tenant tenant) 
    { 
     try 
     { 
      if (file != null) 
      { 
       if (file.ContentLength > 10240) 
       { 
        ModelState.AddModelError("file", "The size of the file should not exceed 10 KB"); 
        return View(); 
       } 

       var supportedTypes = new[] { "jpg", "jpeg", "png", "JPG", "JPEG", "PNG" }; 
       var fileExt = System.IO.Path.GetExtension(file.FileName).Substring(1); 

       if (!supportedTypes.Contains(fileExt)) 
       { 
        ModelState.AddModelError("photo", "Invalid type. Only the following types (jpg, jpeg, png) are supported."); 
        return View(); 
       } 

       using (var db = new LetLordContext()) 
       { 
        var reference = db.Image.Create<ReferencePhoto>(); 

        // Convert HttpPostedFileBase to byte array 
        MemoryStream target = new MemoryStream(); 
        file.InputStream.CopyTo(target); 
        byte[] photo = target.ToArray(); 

        reference.File = photo; 
        reference.Format = fileExt; 
        reference.DateUploaded = DateTime.Now.Date; 
        reference.Description = ""; 
        reference.Name = ""; 

        db.Image.Add(reference); 
        db.SaveChanges(); 

        return PartialView("_TenantReferencePhotosPartial", file); 
       } 

      } 
      else 
      { 
       return View(); 
      } 
     } 
     catch (Exception e) 
     { 
      ModelState.AddModelError("", e); 
      return View(); 
     } 
    } 

जब मैं एक ब्रेक के साथ डिबगर के माध्यम से कदम GET ActionResult पर इंगित करें यह return PartialView पर हिट करता है और कोई अपवाद नहीं फेंक दिया जाता है।

_TenantUploadReferencePartial में मैं

@using (Ajax.BeginForm("TenantUploadReference", "Tenants", FormMethod.Post, new AjaxOptions { InsertionMode = InsertionMode.Replace, HttpMethod = "POST", UpdateTargetId = "tenant-reference-photos" }))

और _TenantReferencePhotosPartial में (जहां ActionLink फेंकता 500 त्रुटि) मैं इस

@if (Model.ReferencePhotos == null) 
{ 
    <h3>You haven't uploaded any references! 
     @Ajax.ActionLink("Upload now?", 
      "TenantUploadReference", 
      new AjaxOptions 
      { 
       UpdateTargetId = "tenant-reference-photos", 
       InsertionMode = InsertionMode.Replace, 
       HttpMethod = "GET", 
       LoadingElementId = "ajax-loader" 
      })</h3> 

यह भी उपयोगी हो सकता है पता करने के लिए उपयोग करने का उपयोग करने वाले पर अन्य partials पृष्ठ अपेक्षित के रूप में काम करता है, इसलिए मुझे नहीं लगता कि यह अनुपलब्ध स्क्रिप्ट के साथ एक मुद्दा है। मुझे नुकसान हो रहा है कि यह क्यों हो रहा है - एक समाधान की सराहना की जाएगी।

+0

मुझे यह दिलचस्प लगता है कि आपकी GET कार्रवाई मॉडल के लिए कभी भी वापस नहीं आ जाएगी। संदर्भ फ़ोटो, लेकिन आप अभी भी दृश्य पर शून्य के लिए परीक्षण करते हैं। दृश्य में और क्या होता है? और क्या आप सुनिश्चित हैं कि प्राप्त विधि मॉडल/नल के साथ दृश्य() को देखने/पकड़ने और वापस नहीं लौटाती है? –

+0

मुझे GET में NullReferenceException मिल रहा था, और जांच के बाद मैंने पढ़ा कि नल कोलेसिंग ऑपरेटरों का उपयोग करके इस प्रकार की स्थिति में इसका समाधान हो सकता है। क्या मुझे ऑपरेटर का उपयोग करने से पहले शून्य के लिए भी परीक्षण करने की आवश्यकता है? यदि उपयोगकर्ता के पास कोई है, तो यदि संदर्भ (अगर) ऐप उपयोगकर्ता को एक्शनलिंक प्रदर्शित करता है तो अन्य संदर्भ संदर्भ प्रदर्शित करेंगे। पुन: पुष्टि करने के लिए, मैंने डीबगर के साथ जीईटी के माध्यम से कदम बढ़ाया है, मॉडल शून्य नहीं है और वापस आंशिक दृश्य हिट किया जा रहा है। – MattSull

+0

क्षमा करें मुझे अभी एहसास हुआ है कि आपका क्या मतलब है, यह समझ में आता है - कभी नल वापस नहीं लौटने और दृश्य में इसके लिए परीक्षण करना। जीईटी में ऑपरेटर का उपयोग करने का कारण NullReferenceException से निपटना था। – MattSull

उत्तर

4

मैंने समस्या हल कर दी है। मैं currentTenant.ReferencePhotos.ToList() लौट रहा था जिसने ArgumentNullException फेंक दिया। अब मैं सिर्फ currentTenant लौट रहा हूं, और जीईटी अपेक्षित के रूप में काम कर रहा है।

+1

खुशी है कि यह तय है, हालांकि दो चीजें। आपके पास 'currentTenant.ReferencePhotos == null' के लिए चेक नहीं होना चाहिए - ऑब्जेक्ट कन्स्ट्रक्टर में मानक इस सूची (या किसी भी सूची) के लिए मानक है। दूसरा, आपको अपने वेब ऐप के लिए एल्मा सक्षम होना चाहिए; यह किसी भी 500 त्रुटियों को लॉग करेगा और अधिकतर इस बग को बहुत स्पष्ट बना दिया होगा (आपको ब्राउजर साइड से इन बग को डिबग नहीं करना चाहिए) – wal

+0

सलाह के लिए धन्यवाद। संदर्भ फोटो एक आईसीओलेसीटियन है (मैं पहले कोड का उपयोग कर रहा हूं), क्या ऑब्जेक्ट कन्स्ट्रक्टर में उसी तरह से सूची बनाई जा सकती है? मैं वास्तव में पहले एल्मा के बारे में पढ़ता हूं, मुझे याद दिलाने के लिए धन्यवाद, मैं इसे सक्षम करना सुनिश्चित कर दूंगा। – MattSull

+0

हाँ, यदि यह आपके सीटीआर में 'आईसीओलेक्शन' है, तो आप बस 'संदर्भ फोटो = नई सूची ();'; क्योंकि सूची 'आईसीओलेक्शन' – wal

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