Как я могу вернуть пустую строку (или ноль) для PartialViewResult? - PullRequest
5 голосов
/ 09 марта 2012

У меня есть метод, который регистрирует голосование за комментарий.Если при голосовании ошибок нет, я возвращаю небольшой фрагмент html через PartialViewResult для обновления страницы.

Если это не удастся, ничего не произойдет.Мне нужно проверить это условие на стороне клиента.

Метод на стороне сервера:

[HttpPost]
public PartialViewResult RegisterVote(int commentID, VoteType voteType) {
    if (User.Identity.IsAuthenticated) {
        var userVote = repository.RegisterVote((Guid)Membership.GetUser().ProviderUserKey, commentID, voteType);
        if (userVote != null) {
            return PartialView("VoteButtons", userCommentVote.Comment);
        }
    }

    return null;
}

Сценарий на стороне клиента:

$(document).on("click", ".vote img", function () {
    var image = $(this);

    var commentID = GetCommentID(image);
    var voteType = image.data("type");

    $.post("/TheSite/RegisterVote", { commentID: commentID, voteType: voteType }, function (html) {
        image.parent().replaceWith(html);
    });
});

Если голос был записан, переменная html содержит разметку, как и ожидалось.Если это не удается (т. Е. Возвращается ноль), тогда переменная html вместо этого является объектом «Document» с ошибкой синтаксического анализа.

Есть ли способ вернуть пустую строку из PartialViewResult, а затем просто проверить длину?Есть ли другой / лучший способ сделать это?

Ответы [ 2 ]

5 голосов
/ 09 марта 2012

Измените подпись вашего метода с: public PartialViewResult

Кому: public ActionResult

Тогда вместо того, чтобы возвращать ноль, верните это:

return Json("");

Это позволит вам вернуть частичное представление в случае успеха, в противном случае он просто вернет JSON с пустой строкой в ​​качестве значения. Ваш текущий JS будет работать как есть. Из MSDN:

Класс ActionResult является базовым классом для результатов действий.

Следующие типы являются производными от ActionResult:

  • ContentResult
  • EmptyResult
  • FileResult
  • HttpUnauthorizedResult
  • JavaScriptResult
  • JsonResult
  • RedirectResult
  • RedirectToRouteResult
  • ViewResultBase

Это то, что позволяет вам возвращать различные производные типы в вашем методе.

0 голосов
/ 09 марта 2012

Было бы лучше вернуть JsonResult как,

    [HttpPost]
    public JsonResult RegisterVote(int commentID, VoteType voteType)
    {
        JsonResult result = new JsonResult();
        object content;
        if (User.Identity.IsAuthenticated)
        {
            var userVote = repository.RegisterVote((Guid)Membership.GetUser().ProviderUserKey, commentID, voteType);
            if (userVote != null)
            {
                content = new
                {
                    IsSuccess = true,
                    VoteButtons = userCommentVote.Comment
                };
            }
            else
            {
                content = new { IsSuccess = false };
            }
        }
        result.Data = content;
        return result;
    }

В вызове Ajax вы можете проверить, является ли IsSuccess true или false.

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