2009-07-18 6 views
3

아약스 액션 링크를 사용하여 한 필드를보기 위해 변경하지 않고 저장하려고한다고 가정합니다.Ajax.ActionLink 호출을위한 사용자 입력을 얻는 방법?

[AcceptVerbs(HttpVerbs.Post)] 
public void SaveComment(Model model) 
{ 
    MyRepository repository = new MyRepository(); 
    Model mod = repository.GetModel(model.ID); 
    mod.MyComment = model.MyComment; 

    try 
    { 
     repository.Save(); 
    } 
    catch(Exception ex) 
    { 
     throw ex; 
    }   
} 

문제는 다음과 같습니다

여기
<%= Html.TextBox("myComment", Model.MyComment)%> 
    <%= Ajax.ActionLink("SAVE", "SaveComment", "Home", 
     Model, new AjaxOptions { HttpMethod = "POST"}) 
    %> 

컨트롤러에서 아약스 actionlink 내 지침 : 여기

내도이다 (이 모델을 입력합니다 수밖에 강력한 형식이다) : 나는 액션 메소드에서 Mycomment를위한 텍스트 박스에서 사용자 입력을 얻을 수 없다. Mycomment의 브라우저에서 사용자가 입력 한 내용에 상관없이 Ajax ActionLink SAVE를 클릭하면 Mycomment의 param 모델에서 값을 확인하고 MyComment에는 아무 것도 변경되지 않습니다.

혼동 : 양방향으로보기 위해 모델을 바인딩해야합니다. 그러나이 경우에는 그렇지 않습니다. 난 여전히 사용자 입력을받을 수 없습니다

public void SaveComment(string commentinput) 

:

Ajax.ActionLink("SAVE", "SaveComment", "Home", 
     new {commentinput =Model.MyComment, new AjaxOptions { HttpMethod = "POST"}) 

다음과 같이 액션 메소드의 서명을 변경 : 는 그럼 난에 Ajax.ActionLink 호출을 변경했습니다.

컨트롤러 작업 방법에서 사용자 입력을 얻는 방법은 무엇입니까?

답변

4

AFAIK Ajax.ActionLink는 양식 값을 쉽게 가져 와서 AJAX로 게시하는 것을 허용하지 않습니다. workarounds은 꽤 해킹 된 것처럼 보입니다. (마지막 단락을 보면 URL을 동적으로 수정하면은 나를 울게합니다).

다음은 jQuery를 방법 (MS 아약스와 비교하면 나는 그것을 좋아한다)이다 :

<%= Html.TextBox("myComment", Model.MyComment) %> 
<%= Html.ActionLink("SAVE", "SaveComment", "Home", new { id = "saveComment" }) %> 

그리고 겸손하게 앵커에 클릭 이벤트 핸들러를 첨부 :

$(function() { 
    $('a#saveComment').click(function(evt) { 
     $.ajax({ 
      url : this.href, 
      data: { 
       // Assuming your model has a property called MyComment 
       myComment: $('#myComment').val() 
      }, 
      success: function(data, textStatus) { 
       // Comment saved successfully 
      } 
     }); 
     evt.preventDefault(); 
    }); 
}); 
+0

감사합니다. 하지만 내보기 테이블, <% = Html.TextBox ("myComment", Model.MyComment) %> 테이블의 각 행에 대한 것입니다. – KentZhou

관련 문제