Я пытаюсь создать ситуацию, когда, если пользователь нажимает кнопку «редактировать» в списке текстовых элементов, он может редактировать этот элемент.Я пытаюсь заставить кнопку «редактировать» отправлять сообщения обратно, используя 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).Почему бы не подхватить элементы управления кнопки?
(Между прочим, идентификаторы элементов управления кнопки редактирования находятся в форме "editItem_x", где x - это идентификатор элемента. Таким образом, элементы управления кнопкиявляются центральными для всего процесса - вот как я выясняю, какой элемент пользователь хочет отредактировать.)
ОБНОВЛЕНИЕ Ответ, похоже, находится в самом jquery API, http://api.jquery.com/serialize/:
«Значение кнопки отправки не сериализуется, так как форма не была отправлена с помощью кнопки.»
Я не знаю, как мое действие должно знать, какая кнопка была нажата, поэтому я вручнуюдобавление кнопки в сериализованную строку, и она, кажется, работает, не столь элегантно, как кажется.
ОБНОВЛЕНИЕ 2
Я говорил слишком рано - ajaxне работает, чтобы обновить мой частичный вид.Это дает мне исключение, потому что один из разделов на моей странице макета не определен.Я сдаюсь - я не могу больше тратить время на это.Нет Ajax для этого проекта.