我试图创建一种情况,如果用户单击文本项目列表中的“编辑”按钮,她可以编辑该项目。我正在尝试使用ajax将“编辑”按钮发回。
以下是我的ajax代码:
$(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()命令并没有拾取表单中的所有窗体控件。它只是为列表中的每一项选择一个隐藏的表单字段。
下面是视图中显示所有项的循环中的代码:
**** 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。
发布于 2011-03-16 18:43:39
你可以试试:
var form = $('#newsForm *'); // note the '*'更新
您是否也将参数更改为$.post()?我想我的回答可能有点太简单了。只需在$.post()中更改第二个参数,同时继续使用form.attr('action')
新的职位应该是这样的:
$.post(
form.attr("action"),
$('#newsForm *').serialize(), // this line changed
function (data) {
$("#" + divID).html(data);
}
);https://stackoverflow.com/questions/5329679
复制相似问题