Как заставить JQuery возвращать View?

Раньше у меня была форма для непосредственного вызова Action, но теперь я хочу использовать JQuery для выполнения каких-либо действий перед вызовом Action. У меня проблема в том, что раньше, когда я вызывал return View() из контроллера, он перезагружал часть страницы с сообщением, которое я поместил в Viewbag.Message. Как мне сделать это с JQuery?

$("#button").click(function () {
    DoStuff();
});
function DoStuff()
{
    $.ajax("Home/DoStuff"), function() {

    };
}

$

[HttpPost]
public ActionResult DoStuff()
{
    string value = Request.Form["value"];

    Viewbag.Message = TempData["message"];

    CustomView view = new CustomView();
    return View(view);
}

1 ответ

Решение

Рассмотрим что-то вроде этого (не проверено):

<html>
    ...
<body>
    ...
    @Html.RenderAction("DoStuff", new { value: "" });
    ...
</body>

Частичное представление DoStuff.cshtml:

<div class="doStuffContent">
<script type="text/javascript">
$("#button").click(function () {
    DoStuff();
});
function DoStuff()
{
    $.ajax(
    {
        url: @Url.Action("DoStuff"),
        data: {value: "testData"},
        success: function(result) 
            {
                $("doStuffContent").replaceWith(result);
            }});
}
</script>
<a id="button">click me</a>
@ViewBag.message
</div>

Действие:

[HttpGet]
public ActionResult DoStuff()
{
    Viewbag.Message = "";

    return View();
}

[HttpPost]
public ActionResult DoStuff(string value)
{
    Viewbag.Message = "Received " + value + "!";

    return View();
}
Другие вопросы по тегам