2011-07-07 50 views
2

結合在我們的MVC3項目中,我們使用的是星火視圖引擎。我們已經建立了一個具有多個綁定,包括一個用於Html.BeginForm一個Bindings.xml文件,如下圖所示:附加火花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> 

然後針對不同的使用情況 - 上面的你只需要添加重載從最具體到最不具體有序和綁定只會挑上提供您的屬性是正確的基礎。

讓我知道這個答案的註釋,如果沒有工作,然後我會扔在一起,一個簡單的例子,並得到它來編譯,我可以給你一個保證的解決方案,它 - 這是所有就在我頭頂。

我不記得這是一個有點棘手,當我以前嘗試過,除了AntiForgeryToken部分,但我傾向於不再使用Ajax助手來支持使用jQuery的JSON調用。但是,沒有任何原因,如果你願意,你不能使用此爲綁定。

讓我知道...
羅布摹

+0

我敢肯定這會工作,但我認爲,致命的是越來越如果你能AjaxOptions {新{{「@ * ajax-」}}} – lomaxx

+0

嗯......其實......想着它是在,這可以工作... – lomaxx

+0

是的 - 如果AjaxOptions是一個字典,也可以工作 – RobertTheGrey