2012-08-08 74 views
1

我用partialview像ASP.NET MVC PartialView有時會出錯?

<td style="vertical-align: top;">@Html.Action("_HavaDurumuPartial") 

,現在是工作在服務器上。但有時它會給出錯誤。錯誤回報低於:

enter image description here

這個錯誤不會發生百達。

我無法找到這個問題的任何原因。我不明白爲什麼有時會給這個錯誤。

如果有必要,我寫下partialview和controller動作的內容。

行動

public ActionResult _HavaDurumuPartial(string il) 
    { 
     il = "Izmir"; 
     HttpWebRequest GoogleRequest; 
     HttpWebResponse GoogleResponse = null; 
     XmlDocument GoogleXMLdoc = null; 
     try 
     { 
      GoogleRequest = (HttpWebRequest)WebRequest.Create("http://www.google.com/ig/api?weather=" + il + "&hl=tr&ie=utf-8&oe=utf-8"); 
      GoogleResponse = (HttpWebResponse)GoogleRequest.GetResponse(); 
      GoogleXMLdoc = new XmlDocument(); 
      GoogleXMLdoc.Load(GoogleResponse.GetResponseStream()); 
      XmlNode root = GoogleXMLdoc.DocumentElement; 
      XmlNodeList nodeList1 = root.SelectNodes("weather/forecast_information"); 
      //ViewBag.HavaDurumu = ViewBag.HavaDurumu + "<b>Şehir : " + nodeList1.Item(0).SelectSingleNode("city").Attributes["data"].InnerText + "</b>"; 
      XmlNodeList nodeList = root.SelectNodes("weather/current_conditions"); 

      ViewBag.HavaDurumu = ViewBag.HavaDurumu + "<table cellpadding=\"5\"><tbody><tr><td style=\"width:50%;\"><b><big><nobr>" + nodeList.Item(0).SelectSingleNode("temp_c").Attributes["data"].InnerText + " °C | " + nodeList.Item(0).SelectSingleNode("temp_f").Attributes["data"].InnerText + " °F</nobr></big></b></br>"; 
      ViewBag.HavaDurumu = ViewBag.HavaDurumu + "<b>Şuan:</b> " + nodeList.Item(0).SelectSingleNode("condition").Attributes["data"].InnerText + ""; 
      ViewBag.HavaDurumu = ViewBag.HavaDurumu + " " + nodeList.Item(0).SelectSingleNode("wind_condition").Attributes["data"].InnerText + "</br>" + ""; 
      ViewBag.HavaDurumu = ViewBag.HavaDurumu + " " + nodeList.Item(0).SelectSingleNode("humidity").Attributes["data"].InnerText; 
      nodeList = root.SelectNodes("descendant::weather/forecast_conditions"); 
      int i = 0; 
      foreach (XmlNode nod in nodeList) 
      { 
       if (i == 0) 
       { 
        i++; 
        continue; 
       } 
       ViewBag.HavaDurumu = ViewBag.HavaDurumu + "</td><td align=\"center\">" + nod.SelectSingleNode("day_of_week").Attributes["data"].InnerText + "</br>" + ""; 
       ViewBag.HavaDurumu = ViewBag.HavaDurumu + "<img src=\"http://www.google.com" + nod.SelectSingleNode("icon").Attributes["data"].InnerText + "\" alt=\"" + nod.SelectSingleNode("condition").Attributes["data"].InnerText + "\">" + "</br>"; 
       ViewBag.HavaDurumu = ViewBag.HavaDurumu + nod.SelectSingleNode("low").Attributes["data"].InnerText + "°C" + "</br>"; 
       ViewBag.HavaDurumu = ViewBag.HavaDurumu + nod.SelectSingleNode("high").Attributes["data"].InnerText + "°C" + "</br>"; 
      } 
      ViewBag.HavaDurumu = ViewBag.HavaDurumu + "</td></tr></tbody></table>"; 
     } 
     catch (System.Exception ex) 
     { 
      ViewBag.HavaDurumu = ex.Message; 
     } 
     finally 
     { 
      GoogleResponse.Close(); 
     } 
     return PartialView(); 
    } 

我得到了從谷歌具體位置與此動作天氣。 謝謝。

+1

這很可能是HavaDurumuPartial動作中出現錯誤。有時不正確的行號顯示爲錯誤。所以檢查你的Action,看看是否可以拋出NullReferenceException。 – Pbirkoff 2012-08-08 15:24:14

+0

錯誤很可能發生在操作方法中;你能從你的控制器發佈示例代碼嗎? – sellmeadog 2012-08-08 15:24:37

+0

我加了行動方法。 – 2012-08-08 15:26:33

回答

1

在最後添加一個空引用檢查。初始化GoogleResponse可能會失敗,因此它仍然爲空。然後,當你嘗試調用.Close()時,你會終於阻止並獲得一個空引用異常,因爲GoogleResponse爲null。

finally 
{ 
    if (GoogleResponse != null) 
    { 
     GoogleResponse.Close(); 
    } 
} 
+1

解決方法就是這樣。感謝幫助。 – 2012-08-09 20:17:34

+0

不是問題,很高興它解決了! – Gromer 2012-08-09 20:28:22

2

目前,您正在使用Google Weather API的間歇403 Forbidden響應。見Google Weather API 403 Error

的原因間歇403響應尚不清楚,但已自2012年8月7日的一個問題

+0

在發佈複製和粘貼樣板/逐字回答多個問題時要小心,這些往往會被社區標記爲「垃圾」。如果你這樣做,那麼它通常意味着問題是重複的,所以標記它們。 http://stackoverflow.com/a/11890885/419 – Kev 2012-08-09 22:44:08