Лично мне не нравятся Ajax.*
помощники.В ASP.NET MVC <3 они загрязняют мой HTML с помощью javascript, а в ASP.NET MVC 3 они загрязняют мой HTML с помощью атрибутов HTML 5 <code>data-*, которые являются полностью избыточными (например, URL-адрес привязки).Также они не анализируют автоматически JSON-объекты в обратных вызовах успеха, о чем ваш вопрос.
Я использую обычные Html.*
помощники, например:
@Html.ActionLink(
"click me", // linkText
"SomeAction", // action
"SomeController", // controller
null, // routeValues
new { id = "mylink" } // htmlAttributes
)
, что, очевидно,создать обычный HTML:
<a href="/SomeController/SomeAction" id="mylink">click me</a>
и который я ненавязчиво AJAXify в отдельных файлах JavaScript:
$(function() {
$('#mylink').click(function() {
$.post(this.href, function(json) {
// TODO: Do something with the JSON object
// returned the your controller action
alert(json.someProperty);
});
return false;
});
});
Предполагая следующее действие контроллера:
[HttpPost]
public ActionResult SomeAction()
{
return Json(new { someProperty = "Hello World" });
}
ОБНОВЛЕНИЕ:
Как и просили в разделе комментариев, вот как это сделать с помощью помощников Ajax.*
(повторяю еще раз, это всего лишь иллюстрация того, как этого можно достичь, и абсолютно нечто-то, что я рекомендую, см. мой первоначальный ответ для моего рекомендуемого решения):
@Ajax.ActionLink(
"click me",
"SomeAction",
"SomeController",
new AjaxOptions {
HttpMethod = "POST",
OnSuccess = "success"
}
)
и внутри обратного вызова успеха:
function success(data) {
var json = $.parseJSON(data.responseText);
alert(json.someProperty);
}