2011-03-16 1 views
0

사용자가 텍스트 항목 목록에서 "편집"버튼을 클릭하면 해당 항목을 편집 할 수있는 상황을 만들려고합니다. 아약스를 사용하여 "편집"단추를 다시 게시하려고합니다.MVC 3 : jquery form.serialize가 내 양식의 모든 컨트롤을 선택하지 않는 이유는 무엇입니까?

$(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() 명령 양식의 모든 폼 컨트롤을 따기되지 않습니다

여기 내 아약스 코드입니다. 목록의 각 항목에 대해 표시되는 숨겨진 양식 필드 만 선택합니다. 그것은 숨겨진 양식 필드 (indexItemID)의 시리즈하지만 아무것도 따기 아니에요

**** 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> 
    } 

:

여기에 모든 항목을 표시하는 루프 내에서, 뷰의 코드입니다. 버튼 컨트롤을 선택하지 않는 이유는 무엇입니까?

(편집 버튼 컨트롤의 ID는 "editItem_x"형식으로되어 있습니다. 여기서 x는 항목의 ID입니다. 따라서 버튼 컨트롤은 전체 프로세스의 핵심입니다. 이는 사용자가 편집하고자하는 항목) 대답은 JQuery와 API 자체 것으로 보인다

UPDATE, http://api.jquery.com/serialize/ :.

"양식이 버튼을 사용하여 제출하지 이후 어떤 버튼 값이 직렬화 제출하지 . "

어떤 동작이 어떤 단추를 클릭했는지 알 수 없으므로 수동으로 단추를 직렬화 된 문자열에 추가하고 있으므로 작동하지 않는 것처럼 보입니다.

업데이트 2 내가 너무 빨리 말을

- 아약스 내 부분보기를 업데이트 작동하지 않습니다. 내 레이아웃 페이지의 섹션 중 하나가 정의되지 않았기 때문에 예외가 발생했습니다. 나는 포기합니다. 더 이상 시간을 낭비 할 수 없습니다. 이 프로젝트에는 Ajax가 없습니다.

답변

0

당신이 시도 할 수 :

var form = $('#newsForm *'); // note the '*' 

업데이트

당신이뿐만 아니라 $.post()에 인수를 변경 했습니까? 나는 내 대답에서 내가 너무 단순했을 것 같아. 다음과 같아야합니다 form.attr('action')

새로운 게시물을 계속 사용하면서 그냥 $.post() 인수를 변경 :

$.post(
    form.attr("action"), 
    $('#newsForm *').serialize(), // this line changed 
    function (data) { 
     $("#" + divID).html(data); 
    } 
); 
+0

아니, 그건 어떤 차이가되지 않습니다. 별표는 무엇을 의미합니까? – Cynthia

+0

좋아요, 별표가 의미하는 것이 무엇인지 알았지 만 여전히 작동하지 않습니다! – Cynthia

+0

내 업데이트를 참조하십시오! – Cynthia

관련 문제