2011-02-24 9 views
2

私はレコードの追加と削除を編集するためのボタンを持つツールバーを持つ編集可能なグリッドを持っています。JqGridはサーバー検証とカスタムエラーメッセージを構成します

  1. 私はasp.mvcのサーバー側の検証を使用して、jqgrid編集フォームに検証メッセージを表示したいと考えています。 (これは可能ですか?)
  2. アプリケーションで例外が発生した場合、編集フォームでメッセージ(内部サーバーエラー...)を上書きしたいと思います。 (これは可能なはずですが、どうすればいいのか分かりませんが、おそらくerrorTextFormatを使用していますか?)

誰かが例を挙げることはできますか?

答えて

4

正しい場合、errorTextFormatは、HTTPエラーの場合にサーバーの応答を取得し、対応するエラーメッセージを表示する正しい方法です。

まず、サーバーはHTTPヘッダーにHTTP error codeという応答を返す必要があります。 errorTextFormatイベントハンドルの実装をprmEdit,prmAddprmDelのいずれかのパラメータ(navGrid)に定義するか、jqGridのデフォルト設定を上書きできます(here参照)。私は個人的にjQuery.jgrid.editjQuery.jgrid.delの変更によってerrorTextFormatを設定することを好みます。対応するコードの例は、old answerにあります。

正確なコードerrorTextFormatの機能は、のサーバー応答の形式に応じてにする必要があります。私はサイト内でWFCを使用してASP.NET MVCを使用し、サーバーはJSONエンコードされた文字列レスポンス(エラーがthrow new WebFaultException<string> ("my error text", statusCode);から来た場合は明示的にスローされます)またはいつかのHTML応答を返すことができます。 errorTextFormatの私の実装では、私が受け取ったエラー応答の種類をテストし、サーバーの応答を変換します。コードフラグメントは次のとおりです。

my.errorTextFormat = function (data) { 
    var str = data.responseText.substr(0, 1); 
    var str1 = data.responseText.substr(0, 6).toLowerCase(); 
    if (str === '"') { 
     var errorDetail = jQuery.parseJSON(data.responseText); 
     var s = "Fehler: '"; 
     s += data.statusText; 
     s += "'. Details: "; 
     s += errorDetail; 
     return s; 
    } 
    else if (str1 === "<html " || str1 == "<html>" || 
      data.responseText.substr(0, 169) === '<?xml version="1.0" encoding="utf-8"?>\r\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r\n<html ') { 
     var bodyHtml = /<body.*?>([\s\S]*)<\/body>/.exec(data.responseText)[1]; 
     return bodyHtml; //bodyContents1; 
    } 
    else { 
     var res = "Status: '"; 
     res += data.statusText; 
     res += "'. Felhercode: "; 
     res += data.status; 
     return res; 
    } 
}; 
jQuery.extend(jQuery.jgrid.edit, { 
    ... 
    errorTextFormat: my.errorTextFormat 
}); 
jQuery.extend(jQuery.jgrid.del, { 
    ... 
    errorTextFormat: Testportal.errorTextFormat 
}); 

コードは完全ではありませんが、独自のコードを作成するために使用できます。

+0

これは私のために働いていません。私のMVCコントローラは500エラーを返しています。私は編集上で上記のコードを使用しましたが、そのイベントは一度も発生しません。 – aman

+0

@aman:どのコードを正確に使用していますか?どの**バージョン**のjqGridを使用していますか** jqGridの**フォーク**?答えは非常に古くて完全ではありません(例えば、 'var my = {};'は最初の文として存在せず、 'Testportal.errorTextFormat'は原因の' my.errorTextFormat'に置き換えます)。より最近のバージョンのjqGridには*ローカライズされた*メッセージのみが含まれており、 '$ .jgrid.edit'と' $ .jgrid.del'を '$ .jgrid.locales [" en-US "]に置き換える必要があります。 edit'と '$ .jgrid.locales [" en-US "]。del' – Oleg

+0

実際に私はここで質問を提起しました。https://stackoverflow.com/questions/48524588/jqgrid-show-custom-message-on-form -field。そして、この答えが検索されました。あなたは上記のリンクで私のポストを見て、解決策が何であるかを見てください。ありがとう – aman

関連する問題