2011-07-07 20 views
2

のバインディング火花を追加します。以下に示すように私たちは、Html.BeginFormのための1つを含むいくつかのバインディングを持つbindings.xmlにファイルを設定している:は、私たちがスパークビューエンジンを使用している、私たちのMVC3プロジェクトでAjax.BeginForm

<element name="Form"> 
    <start># using (Html.BeginForm("@action", "@controller", new RouteValueDictionary{{"@route-*"}}, [email protected], new Dictionary[[string,object]]{{"@*"}})) {</start> 
    <end># }</end> 
</element> 

次のように私たちは、私たちの見解でこれを使用します。

<Form controller="Account" action="Create" method="Post"> 
.... 
</Form> 

我々が今持っていますajaxフォームを使用したいので、理想的には、新しいバインディングを追加して使用することができます。

問題は、Ajax.BeginFormがAjaxOptionsオブジェクトを受け入れることです。このオブジェクトは、UpdateTargetId、成功/失敗のメソッドおよびコールバックのようなものを設定するために使用されます。

カミソリでは、私は通常のようなもの呼び出します:ユースケースによっては

@using(Ajax.BeginForm("Create", "Account", new AjaxOptions { UpdateTargetId = "mydiv" })) 

を、我々はAjaxOptionsオブジェクト上の異なるフィールドを設定し、他の人を無視することになるでしょう。

は、私たちは私たちに、この機能を可能にするAJAXフォームの結合火花を追加することができます方法はありますか?例えば:私たちはAJAXのフォームに何かを宣言することができるように:

<AjaxForm controller="Account" action="Create" ajax-UpdateTargetId="mydiv"></AjaxForm> 

または別のインスタンスで

<AjaxForm controller="Account" action="Create" ajax-OnComplete="handleSuccess"></AjaxForm> 

答えて

2

...私に教えてください:

<element name="AjaxForm"> 
    <start># using (Ajax.BeginForm(new AjaxOptions{"@ajax-*"})) {</start> 
    <end># }</end> 
</element> 

そして、あなたのコードでそれを使用する:必要に応じて

<AjaxForm ajax-UpdateTargetId="mydiv"> 
    Some form elements go here... 
</AjaxForm> 

は、独自のオーバーロードを追加します。コントローラー/アクションパラメーター用。

これで唯一の注意点は、あなたに@ *ワイルドカードの初期化子を使用して設定できるオプションは、文字列型でなければならないということです。

+0

ありがとう、それはうまくいくようです。私が持っていた問題は、二重中括弧を使用していたということでした。たとえば、新しいAjaxOptions {{"@ ajax- *"}} – Fatal

+0

ええ、二重を必要とする辞書を初期化しているのですが、これは単なる標準オブジェクト初期化子です – lomaxx

1

をだから私はあなたがこれを試したし、それはあなたのために働いていないと仮定?

異なるユースケースのための
<element name="AjaxForm"> 
    <start># using(Ajax.BeginForm(@action, @controller, new AjaxOptions { UpdateTargetId = @ajax-UpdateTargetId })) {</start> 
    <end># }</end> 
</element> 

そして - あなただけの特定少なくともに最も具体的なから注文上記のオーバーロードを追加し、バインディングはちょうど与え、あなたの属性上で右1台を選ぶだろう。

この回答にコメントを付けてください。それがうまくいかない場合は、一緒にすばやくサンプルを投函してコンパイルして、保証されたソリューションを提供します。これがすべてですちょうど私の頭の上から離れている。

AntiForgeryToken部分を除いて、私が以前に試したときにややこしく思ったことはありませんが、jQueryを使用してJSON呼び出しを使用することはありません。しかし、あなたが望むなら、これをバインディングとして使うことはできません。

ここで結合だ
ロブG

+0

私はこれがうまくいくと確信していますが、致命的だったのはあなたがAjaxOptions {new {{"@ ajax- *"}}} – lomaxx

+0

hmmm ...実際には...それについて考えるそれはうまくいくかもしれません... – lomaxx

+0

はい、AjaxOptionsが辞書である場合にも動作します – RobertTheGrey

関連する問題