【问题标题】:add spark binding for Ajax.BeginForm为 Ajax.BeginForm 添加火花绑定
【发布时间】:2011-07-07 11:58:29
【问题描述】:

在我们的 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>

【问题讨论】:

    标签: asp.net-mvc-3 spark-view-engine


    【解决方案1】:

    这是绑定:

    <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 参数添加您自己的重载。

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

    【讨论】:

    • 谢谢,这似乎有效。我遇到的问题是我使用了双花括号,例如 new AjaxOptions{{"@ajax-*"}}
    • 是的,如果你正在初始化一个字典,你需要双打,但这只是一个标准的对象初始化器
    【解决方案2】:

    所以我假设你已经尝试过了,但它对你没有用?

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

    然后针对不同的用例 - 您只需添加上述从最具体到最不具体的顺序的重载,绑定将根据您提供的属性选择正确的一个。

    让我知道对此答案的评论,如果它没有奏效,那么我会一起抛出一个简单的例子并让它编译,我可以给你一个有保证的解决方案 - 这只是从我的头上掉下来。

    除了AntiForgeryToken 部分之外,我不记得我之前尝试过这有点棘手,但我倾向于不再使用 Ajax 帮助程序,而是使用 jQuery 来支持 JSON 调用。但是,如果您愿意,没有理由不能将其用作绑定。

    让我知道...
    抢G

    【讨论】:

    • 我很确定这会起作用,但我认为 Fatal 的意思是如果你可以 AjaxOptions {new {{"@ajax-*"}}}
    • 不需要是字典...据我所知,Spark 只是以通配符模式迭代元素并以 propertyname="value" 方式将它们吐出,这将完美地工作可以在对象初始化器上设置基于字符串的元素。刚刚发布了一个示例
    • 是的 - 我想我的意思是它们必须是字符串
    猜你喜欢
    • 2012-09-12
    • 2015-05-03
    • 2017-07-05
    • 2012-05-31
    • 2014-06-28
    • 2022-08-16
    • 2011-01-30
    • 2018-02-22
    • 2011-01-22
    相关资源
    最近更新 更多