Как получить пользовательский ввод для вызова Ajax.ActionLink для метода действия? - PullRequest
3 голосов
/ 18 июля 2009

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

Вот мое представление (это строго типизированное представление, привязанное к типу Model):

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

Я все еще не могу получить пользовательский ввод.

Как получить пользовательский ввод в методе действия контроллера?

1 Ответ

4 голосов
/ 19 июля 2009

AFAIK Ajax.ActionLink не позволяет вам легко получать значения форм и публиковать их с помощью AJAX. Есть некоторые обходные пути , которые кажутся довольно хакерскими (глядя на последний абзац Адаптация 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();
    });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...