asp.net mvc 3 -为Ajax.BeginForm添加spark绑定



在我们的MVC3项目中,我们使用Spark视图引擎。我们已经建立了一个binding .xml文件,其中有几个绑定,包括一个Html绑定。BeginForm,如下所示:

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

我们在视图中这样使用:

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

我们现在有几种情况,我们想要使用ajax表单,所以,理想情况下,我们想要添加一个新的绑定,以便我们可以使用

问题是Ajax。BeginForm接受AjaxOptions对象。该对象用于配置UpdateTargetId、方法和成功/失败回调等内容。

在Razor中,我通常会这样调用:

@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>

绑定:

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

在你的代码中使用它:

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

根据需要为Controller/Action参数添加自己的重载。

唯一需要注意的是,你可以使用@*通配符初始化器设置的选项必须是字符串类型的

所以我假设你已经尝试过这个,它还没有为你工作?

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

然后对于不同的用例——你只需要添加上面从最具体到最不具体的的重载,绑定就会根据你提供的属性选择正确的一个。

让我知道对这个答案的评论,如果它没有工作,然后我会扔一个快速的例子在一起,让它编译,我可以给你一个保证的解决方案-这都只是我的头。

我不记得这在我之前尝试的时候有一点棘手,除了AntiForgeryToken部分,但我倾向于不再使用Ajax帮助程序,而是使用jQuery进行JSON调用。但是如果你愿意的话,没有理由不能把它用作绑定。

让我知道…
罗伯·G

最新更新