首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC 3:为什么jQueryform.serialize不选择我形式中的所有控件?

MVC 3:为什么jQueryform.serialize不选择我形式中的所有控件?
EN

Stack Overflow用户
提问于 2011-03-16 18:03:53
回答 1查看 3.3K关注 0票数 0

我试图创建一种情况,如果用户单击文本项目列表中的“编辑”按钮,她可以编辑该项目。我正在尝试使用ajax将“编辑”按钮发回。

以下是我的ajax代码:

代码语言:javascript
复制
    $(function () {
        // post back edit request
        $('input[name^="editItem"]').live("click", (function () {
            var id = $(this).attr('id');
            var sections = id.split('_');
            if (sections.length == 2) {
                var itemID = sections[1];
                var divID = "message_" + itemID;
                var form = $("#newsForm");
                $.post(
                    form.attr("action"),
                    form.serialize(),
                    function (data) {
                        $("#" + divID).html(data);
                    }
                );
            }
            return false;
        }));
    });

但是form.serialize()命令并没有拾取表单中的所有窗体控件。它只是为列表中的每一项选择一个隐藏的表单字段。

下面是视图中显示所有项的循环中的代码:

代码语言:javascript
复制
 **** this is the only control being picked up: ******
 @Html.Hidden(indexItemID, j.ToString())
 ****
 <div class="datetext" style="float: right; margin-bottom: 5px;">
      @Model.newsItems[j].datePosted.Value.ToLongDateString()
 </div>
 @if (Model.newsItems[j].showEdit)
 {
    // *********** show the editor ************
    <div id="@divID">
    @Html.EditorFor(model => model.newsItems[j])
    </div>
 }
 else
 {
    // *********** show the normal display, plus the following edit/delete buttons *********** 

    if (Model.newsItems[j].canEdit)
    {
         string editID = "editItem_" + Model.newsItems[j].itemID.ToString();
         string deleteID = "deleteItem_" + Model.newsItems[j].itemID.ToString();
         <div class="buttonblock">
            <div style="float: right">
                <input id="@editID" name="@editID" type="submit" class="smallsubmittext cancel" title="edit this item" value="Edit" />
            </div>
            <div style="float: right">
                <input id="@deleteID" name="@deleteID" type="submit" class="smallsubmittext cancel" title="delete this item" value="Delete" />
            </div>
        </div>
        <div class="clear"></div>
    }

除了一系列隐藏的表单字段(indexItemID)之外,什么都没有得到。为什么它不拿起按钮控制?

(顺便说一下,编辑按钮控件的ID是"editItem_x“形式,其中x是项的ID。因此,按钮控件是整个过程的核心--这就是我如何确定用户想要编辑的项目。)

更新答案似乎是jquery本身,http://api.jquery.com/serialize/

“没有序列化任何提交按钮值,因为表单没有使用按钮提交。”

我不知道我的操作是如何知道哪个按钮被点击的,所以我手动地将该按钮添加到序列化的字符串中,而且它看起来确实工作,尽管它看起来很不雅致。

更新2

我说得太早了-- ajax没有更新我的部分视图。它给了我一个例外,因为我的布局页面中的一个部分是未定义的。我放弃了--我不能再在这上面浪费时间了。此项目不使用Ajax。

EN

回答 1

Stack Overflow用户

发布于 2011-03-16 18:43:39

你可以试试:

代码语言:javascript
复制
var form = $('#newsForm *'); // note the '*'

更新

您是否也将参数更改为$.post()?我想我的回答可能有点太简单了。只需在$.post()中更改第二个参数,同时继续使用form.attr('action')

新的职位应该是这样的:

代码语言:javascript
复制
$.post(
    form.attr("action"),
    $('#newsForm *').serialize(), // this line changed
    function (data) {
        $("#" + divID).html(data);
    }
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5329679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档