2012-02-16 21 views
14

私はc#.NET MVC2で作業していますが、データベースレコード(RemoveRelation)を削除するメソッドを呼び出すajaxフォームを作成しようとしています。レコードを削除するプロセスは意図したとおりに動作しています。 レコードが削除された後、フォームはビジュアルからレコードを削除するjavascript関数を呼び出す必要があります(RemoveRelation(10))。これはAJAX呼び出しによって行われますが、Internet Explorer 9とFirefox 4はChrome上で何らかの理由で意図したとおりに動作していますが、AJAX呼び出しの途中で更新が行われず、レコードを削除するフォームが更新されるとページ全体が更新されます(フォームがAJAX機能で生成されていると思われます)。 Ajax.BeginFormがChromeで動作しないのはなぜですか?

<% using (Ajax.BeginForm("RemoveRelation", "Relations", 
     new AjaxOptions { OnSuccess = "function() { RemoveRelation(10); } ", InsertionMode = InsertionMode.Replace, UpdateTargetId = "Relation10" }, 
     new { id = "DeleteForm10" })) 
    { %> 

がさらにChromeで私は別のAjax.BeginFormと別の問題があります。これは、と私は、フォームを生成していたコードです。
<% using (Ajax.BeginForm("AddRelation", "Relations", new AjaxOptions { InsertionMode = InsertionMode.Replace, UpdateTargetId = "AddRelation" }, new { id = "AddRelationForm" })) 
    { %> 

開始上記のフォームコード

ではなく、それらを取り除くのリストに関係を追加するために使用されます。もう一度IE9とFF4で、上記のように意図したとおりに動作しています.1つを追加してajaxで更新するのではなく、2回レコードを追加して、もう一度ajaxの更新ではなくページ全体を更新します。

なぜクロームで分解されますか?

+0

あなたはhttp://jquery.malsup.com/form/の代わりに – Manatherin

答えて

1

です。 『』タグは、ページ全体の更新を引き起こしクロームでめちゃくちゃにされたから「.submitを()」を呼び出すいくつかの理由について

<A href='#' onclick="javascript:$('#ajaxform').submit();">Remove</a> 

:私は、Ajaxのフォームのようにのような「」タグを通じて提出呼んでいましたajax呼び出しの代わりに。私の代わりに次のコードを使用して問題を修正:

<input type='submit' value='Remove' /> 

私は削除する前に確認を求めるために入力するためにJavaScriptコマンドを追加するために必要な場合は、このソリューションにも働きました。唯一の不満は、私のボタンが彼らが提出しているフォーム内で起こっていることを保証するためにマークアップを入れ替える必要があったことです(すべての状況で常に可能なわけではありません)。

+2

あなたはそれを保つことができました。あなたはonclickの最後にfalseを返す必要があります(onclick = "javascript:$( '#ajaxform')。submit(); return false;"))。その理由は、 'a'タグはブラウザが(どこにもいなくても)リンクにナビゲートし、falseを返すだけでデフォルトのブラウザアクションが起こらないようにするからです。出典:http://jszen.blogspot.com/2007/03/return-false-to-prevent-jumping.html – SPFiredrake

12

Microsoft AJAXと特定のWebkitブラウザに問題があります。私は少し前にこの問題に遭遇しましたが、修正は非常に簡単です。 webkit.jsファイルを作成し、内容でこれを置く:

Sys.Browser.WebKit = {}; //Safari 3 is considered WebKit 
if(navigator.userAgent.indexOf('WebKit/') > -1) 
{ 
    Sys.Browser.agent = Sys.Browser.WebKit; 
    Sys.Browser.version = parseFloat(navigator.userAgent.match(/WebKit\/(\d+(\.\d+)?)/)[1]); 
    Sys.Browser.name = 'WebKit'; 
} 

その後、あなたのScriptManager内のどこかあなたのページのいずれかで(好ましくは、マスターページに、私は終わり近くにこれを追加しました)、スクリプト参照を追加します。

<Scripts> 
    <asp:ScriptReference Path="webkit.js" /> 
</Scripts> 
//OR 
<script src="webkit.js"> 

私は情報を見つけた元のサイトを覚えていませんが、これはthis pageから取得できました。がんばろう!あなたのプロジェクトは、MVC 3の中に、jqueryのAJAXをasp.net MVC 3を使用するように更新することが

+0

を使うことを検討したいと思うかもしれませんが、これはうまくいったと思っていましたが、今は完全ページ更新を行っていません。 –

+0

コンソールでXmlHttpRequestエラーが発生していないか確認してください。 ChromeのコンソールはFirebugと似ていますが、内蔵されていて(IMO)使いやすくなっています。これは、元々、.NET AJAX JSファイルの1つ(ファイルの先頭にある)で失敗していたため、私が最初にこの問題を発見した方法でした。 – SPFiredrake

+0

私は、XmlHttpRequestエラー、または何らかのエラーや警告を受け取っていません。 –

1

は、私が問題に奇妙な解決策を発見したデフォルト

+0

プロジェクトのこの段階でMVCを更新したいと思っています。これは作業プロジェクトであり、フレームワーク内の何かを変更するということは、すべてのフォームを再テストしなければならないということです。私の上司は、もう1ヶ月のテストをすることに全く満足していないでしょう。 –

関連する問題