2009-07-18 36 views
3

假設我想使用ajax操作鏈接來保存一個字段而不改變視圖。如何獲取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的參數模型中的值,MyComment沒有任何變化。

困惑的是:模型應該綁定在雙向查看。但對於這種情況,似乎沒有。 後來我改變了Ajax.ActionLink呼籲:

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

然後改變操作方法的簽名:

public void SaveComment(string commentinput) 

我仍然不能得到用戶的輸入。

如何獲取控制器操作方法中的用戶輸入?

回答

4

AFAIK Ajax.ActionLink不允許您輕鬆獲取表單值並將其與AJAX一起發佈。有一些workarounds這似乎相當hackish(看最後一段動態調整網址讓我哭了)。

這裏是jQuery的方式(我喜歡它,如果相比於MS阿賈克斯):

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

然後悄悄地附上一個Click事件處理到錨:

$(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 2009-07-18 23:10:29