2009-07-18 2 views
3

Предположим, я хочу использовать ссылку ajax для сохранения одного поля без изменений для просмотра.Как получить пользовательский ввод для вызова Ajax.ActionLink для действия?

Вот мой взгляд (это сильно типизированных вид обязан ввести модель):

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

Вот мое действие для АЯКС 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, я проверяю значение из модели param для Mycomment, ничего не изменилось для MyComment.

Confused is: Модель должна быть привязана для просмотра в двух направлениях. но для этого случая, похоже, нет. Тогда я изменил вызов 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, которые кажутся довольно хакерскими (смотря на последний абзац Адаптация URL динамически заставляет меня плакать).

Вот как JQuery (я предпочитаю это, если по сравнению с MS Ajax):

<%= 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

Смежные вопросы