Предотвратить Ajax.BeginForm от вывода кодировки HTML - PullRequest
0 голосов
/ 01 июня 2011
@using (Ajax.BeginForm("Create", "Comment", 
    new AjaxOptions
    { 
        UpdateTargetId = "newComment",
        OnSuccess = "function() { alert('finished " + ViewData.Model.Id + "'); }",
    }))
{
   ...
}

выводит следующую разметку:

<form action="/Comment/Create" data-ajax="true" data-ajax-mode="replace" 
 data-ajax-success="function() { alert(&#39;finished 34&#39;); }" 
 data-ajax-update="#newComment34" id="form1" method="post">

Как вы можете видеть, он имеет кодировку HTML моего javascript.Как мне предотвратить это?

EDIT : у меня есть несколько форм AJAX на моей странице, поэтому функция onsuccess должна знать, какая из них ее вызывала.В моем коде вы можете видеть, что я пытаюсь передать состояние этой функции.Если OnSuccess может принимать только имя функции (а не состояние), то как мне этого добиться?

Ответы [ 3 ]

2 голосов
/ 01 июня 2011

Лично я бы использовал стандартный Html.BeginForm помощник с атрибутами HTML5 data-*, который я сам AJAXify:

@using (Html.BeginForm(
    "Create", 
    "Comment", 
    FormMethod.Post, 
    new { data_id = Model.Id }
))
{
    ...
}

, который выводит:

<form action="/Comment/Create" data-id="some id here" method="post">
    ...
</form>

, а затем вотдельный файл javascript, на который я бы подписался на событие .submit:

$(function() {
    $('form').submit(function() {
        $.ajax({
            url: this.action,
            type: this.method,
            data: $(this).serialize(),
            dataId: $(this).data('id'), // <- pass the data-id HTML5 attribute
            success: handleSuccess
        });
        return false;
    });
});

function handleSuccess(result) {
    $('#newComment').html(result);

    // fetch the data-id of the form that trigerred the AJAX request
    var id = this.dataId; 

    // TODO: do something with this id
}

Я предпочитаю эту технику по сравнению с помощниками Ajax.*, так как она дает мне весь контроль, который мне может понадобиться.Другое преимущество заключается в том, что мы получаем четкое разделение между скриптом и разметкой, что делает код красивым и аккуратным.

0 голосов
/ 01 июня 2011

Я полагаю, что это потому, что MVC интерпретирует OnSuccess (и другие переменные) как имя функции Javascript, а не бит Script.

Создайте вспомогательную функцию, которая выполняет сценарий, с которым вы хотите работатьотправить.

0 голосов
/ 01 июня 2011

Не.

Кодировка HTML - это правильное поведение, и значение атрибута (как видно из кода Javascript) не будет закодировано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...