Могу ли я добавить ответ json при возврате вида MVC с моделью?

Вы не можете выбирать псевдо элементы в jQuery, потому что они не являются частью DOM. Но вы можете добавить определенный класс к элементу отца и управлять его псевдоэлементами в CSS.

ПРИМЕР

В jQuery:


В CSS:

span.change:after { content: 'bar' }

1
задан vscoder 27 March 2019 в 23:04
поделиться

1 ответ

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

@using (Ajax.BeginForm("AddUserRole", "AppRoles", null,
    new AjaxOptions
    {
        HttpMethod = "Post",
        OnBegin = "OnBegin",
        OnFailure = "OnFailure(xhr, status)",
        OnSuccess = "OnSuccess(data, status, xhr)"
    },
    new { id = "myform" }))

Далее javascript для OnSuccess выглядит следующим образом. Несколько вещей, чтобы отметить; Сначала контроллер, показанный ниже, может вернуть либо JsonResult, либо View / Model. Функция OnSuccess будет запущена независимо от того, какая из них будет возвращена, если HttpResponseStatus в порядке. Если контроллер возвращает представление / модель, то в параметре данных будет содержаться весь визуализированный вид, а нужный мне json будет в параметре XHR. Для работы с ответом json его нужно извлечь с помощью getResponseHeader и затем сериализовать в JSON. После этого мы можем работать с ним как с обычным старым объектом JSON.

function OnSuccess(data, status, xhr) {
    console.log("OnSuccess");
    // this is for capturing from the Response header WHEN the controller returns a view
    var srchMessage = xhr.getResponseHeader("srchMessage")
    if (srchMessage != null) {
        var srchJson = JSON.parse(srchMessage);
        console.log("srchMessage:param1" + srchJson.param1);
        return;
    }
    // this is for capturing the json WHEN the controller returns a JsonResult
    if (xhr.responseJSON != null) {
        console.log("xhr.responseJSON.param1" + xhr.responseJSON.param1);
    }
}

Контроллер MVC может возвращать либо «короткий» JsonResult, либо полный вид, выглядит примерно так

public ActionResult AjaxTest(AppModel model)
{
    if (model.status == "ReturnView")
    {
        jsonMessage = new { param1 = "param1", param2 = "param2", param3 = "param3" };
        string jsonString = Newtonsoft.Json.JsonConvert.SerializeObject(jsonMessage);
        HttpContext.Response.AddHeader("srchMessage", jsonString);
        HttpContext.Response.StatusCode = (int)HttpStatusCode.OK;
        return View(model);
    }

    if (model.status == "ReturnJSON")
    {
        jsonMessage = new { param1 = "param1", param2 = "param2", param3 = "param3" };
        HttpContext.Response.StatusCode = (int)HttpStatusCode.OK;
        return Json(jsonMessage, JsonRequestBehavior.AllowGet);
    }
}

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

0
ответ дан vscoder 27 March 2019 в 23:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: