0

私の MVC アプリケーションでは、ファイルのアップロードに uploadify を使用しています。コントローラーのアクションは次のとおりです。

[HttpPost]
public ActionResult Upload(HttpPostedFileBase fileData, FormCollection forms)
{
  try
  {                
    if (fileData.ContentLength > 0)
    {
      var statusCode = Helper.UploadList();
      if (statusCode.Equals(System.Net.HttpStatusCode.Created))
      return Json(new { success = true });                      
    }                  
  }
  return Json(new { success = false });        
}
catch (Exception ex)
{       
}   

StatusCode に基づいて success= true/false を設定し、uploadify の onComplete イベント (.js ファイル内) に渡し、意味のあるアラートをいくつか表示します。

Helper.UploadList() が次のような例外をスローした場合:

throw new ArgumentException("Doesn't exist");   

コントローラー アクションでその例外をキャッチし、最終的にそれを .js ファイルに渡して、ユーザーにエラーを表示するにはどうすればよいでしょうか?

編集: return Json(new { success = false }); を設定した場合 catch ブロックでは、値が onComplete に到達しません。

'onComplete': function (event, queueID, fileObj, response, data) {
                if (response == '{"success":true}') {                    
                    alert("file uploaded successfully.");
                }
                else if (response == '{"success":false}') {
                    alert('file failed to upload. Please try again!');                   
                }
                return false;
            },

    I see this on the UI:

ここに画像の説明を入力

4

2 に答える 2

0

ステータスコードを返すことを検討するかもしれません

catch(Exception ex)
{
    return new HttpStatusCodeResult(400, "Unexpected error uploading");
}

あなたのjsで

$.ajax({
    url: "http://blaa.com/Upload",
    type: "post",
    statusCode: {
        400: function(e) {
            // do whatever
        }
    }
});

メッセージは e.statusText にありますが、表示するには IIS または IIS Express を使用している必要があります。VS 開発サーバーはデバッグ時にメッセージを送信しません - http://forums.asp.net/post/4180034.aspx

于 2012-04-18T07:39:18.133 に答える
0

これを少し賢く行うことができます:

public class ErrorModel{
    public bool Success{get;set;}
    public string Reason{get;set;}
}

public JsonResult Upload(HttpPostedFileBase fileData, FormCollection forms)
 {
    var model = new ErrorModel { Success = false };
    try
 {                
    if (fileData.ContentLength > 0)
  {
     var statusCode = Helper.UploadList();
    if (statusCode.Equals(System.Net.HttpStatusCode.Created))
    model.Reason = "File uploaded: " + filename;
    model.Success = true;
    return JSon(model);                           
   } else {
     model.REason = "ERROR: failed to upload file";
     return JSon(model);  
   }                  
 }

   }
    catch (Exception ex)
  {  
 model.reason = ex.Message;
 return JSon(model);  
}   

JavaScript:

dataTYpe: 'json',
success: function(data){
     if(data.Success){
       } else {
         alert(data.Reason);
      }
}

少し余分な作業が必要で、ファイルをさらにチェックする必要がありますが、この方法で意味のある結果を簡単に返すことができます。

于 2012-04-17T22:09:55.170 に答える