2013-12-13 54 views
2

我有一個上傳控制器至極火災視圖此的ActionResult:拋出異常

[HttpPost] 
    public ActionResult ProcessSubmitUpload(HttpPostedFileBase attachments, Guid? idDocument) 
    { 
      //Validations 
      var xmlDocument = XDocument.Load(attachments.InputStream); 
      DocumentCommonHelper.SendFile(xmlDocument); 
    } 

的SENDFILE方法:

public static void SendCte(XDocument xmlDocument) 
    { 
     var client = new WsSoapClient(); 
     client.InsertXML(xmlDocument); 
    } 

的web服務,如果somethig出錯,就像返回的SoapException: 「IDDocument不存在」等等等等

但是在MVC當我調試時,如果在InsertXml方法出了問題,我無法捕捉它,調試導航只是停止並拋出一個上傳文件錯誤。

我想在我的操作中捕獲InsertXML方法的返回消息並將其返回給我的視圖。就像一個'警報'彈出。 我該怎麼做?

+1

使用'嘗試{}趕上{}'捕獲錯誤。如果你想要一個彈出窗口,我會使用[Jquery UI對話框](http://jqueryui.com/dialog/)來查看。通過jquery或javascript處理異步操作將允許您捕獲返回的消息或HTML並生成對話框。 – James

+0

@詹姆斯我需要處理什麼樣的異常? – gog

+0

你應該處理你認爲可能首先返回的任何異常,然後總是處理'exception'以趕上其他任何異常。 – James

回答

3

您可以將錯誤消息返回到ModelState對象中的視圖。視圖可以使用的ValidationSummary助手顯示出來:

[HttpPost] 
public ActionResult ProcessSubmitUpload(HttpPostedFileBase attachments, Guid? idDocument) 
{ 
     //Validations 
     var xmlDocument = XDocument.Load(attachments.InputStream); 
     try 
     { 
      DocumentCommonHelper.SendFile(xmlDocument); 
     } 
     catch(Exception ex) 
     { 
      ModelState.AddModelError("ProcessSubmitUpload", ex.Message); 
      return View(new MyViewModel()) 
     } 
} 

查看:

@using(Html.BeginForm("ProcessSubmitUpload", "MyController", FormMethod.Post)) 
{ 
    @Html.ValidationSummary() 
    ... etc. 
} 
+0

Exception類型的ex.Message屬性將返回InsertXML響應?我可以在這種情況下使用「投擲新」嗎? – gog

+0

它將包含SendFile(或InsertXML)方法中引發的異常的描述。 –

+1

對不起,沒有讀你的第二個問題。如果你在這裏處理程序中拋出一個新的異常,你會得到死亡的黃色屏幕(或者如果配置了你自己的自定義錯誤頁面)。如果你想給用戶一條消息,你需要處理這個異常(就像我的例子),並且以一種與其他錯誤消息(例如驗證)兼容的方式返回一個用戶錯誤消息給視圖進行顯示。 ModelState是這樣做的正常方式,因爲這是MVC用於驗證消息的方式。 –

2

您可以將SendFile方法調用與try..catch塊包裝在一起,並且catch部分用返回的結果填充有關故障的相應信息。