在我们的MVC3项目中,我们使用的是Spark视图引擎。我们已经设置了一个Bindings.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表单添加一个spark绑定,以便我们使用这个功能?例如:这样我们可以声明ajax形式如下:
<AjaxForm controller="Account" action="Create" ajax-UpdateTargetId="mydiv"></AjaxForm>
或在另一个例子中
<AjaxForm controller="Account" action="Create" ajax-OnComplete="handleSuccess"></AjaxForm>
答案 0 :(得分: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>
根据Controller / Action参数的需要添加自己的重载。
唯一需要注意的是,您可以使用@ *通配符初始化程序设置的选项必须是字符串类型。
答案 1 :(得分:1)
所以我假设你已经尝试了这个并且它对你不起作用了吗?
<element name="AjaxForm">
<start># using(Ajax.BeginForm(@action, @controller, new AjaxOptions { UpdateTargetId = @ajax-UpdateTargetId }) ) {</start>
<end># }</end>
</element>
然后针对不同的用例 - 您只需从最具体到最不具体的添加上述排序的重载,Bindings将根据您提供的属性选择正确的一个。
让我知道对这个答案的评论,如果它没有奏效,那么我将一起快速举例并让它编译,我可以给你一个有保证的解决方案 - 这就是全部脱离我的头顶。
我不记得在我之前尝试过这一点时有点棘手,除了AntiForgeryToken
部分,但是我倾向于不再使用Ajax助手来支持使用jQuery的JSON调用。但如果你愿意的话,没有理由不能将它用作绑定。
让我知道......
Rob G