2009-07-18 9 views
3

ajaxアクションリンクを使用して、ビューを変更せずに1つのフィールドを保存するとします。ここでアクションメソッドのAjax.ActionLink呼び出しのユーザー入力を取得する方法は?

は、私の見解は、(それがモデルを型にバインド厳密に型指定されたビューである)である:ここでは

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

は、コントローラ内の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; 
    }   
} 

問題は次のとおりです。アクションメソッドのMycommentのテキストボックスにユーザー入力を取得できません。 Mycommentのブラウザでユーザーが入力したものが何であれ、Ajax ActionLink SAVEをクリックするとMycommentのparamモデルの値がチェックされますが、MyCommentでは何も変更されません。

混乱:モデルを双方向で表示するようにバインドする必要があります。しかし、この場合はそうではないようです。 はその後、私はAjax.ActionLink呼び出しを変更:私はまだユーザー入力を取得することはできません

public void SaveComment(string commentinput) 

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

その後、としてアクションメソッドのシグネチャを変更しました。

コントローラアクションメソッドでユーザー入力を取得するにはどうすればよいですか?

答えて

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