вернуть JavaScript из действия asp.net - PullRequest
0 голосов
/ 08 декабря 2011

Я работаю над сайтом, где пользователи могут добавлять баллы другому пользователю, однако, как только пользователь добавил балл другому конкретному пользователю, он не может добавить больше баллов тому же пользователю. Таким образом, user1 может дать только одно очко user2.

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

[HttpPost]
    public ActionResult AddPointAndCopyCurrentFavToPlaylist(int id)
    {
        if (CheckIfPointExists(User.Identity.Name, id))
        {
        var originalSong = repository.GetCurrentFav(id);

        var newSong = new Song();
        newSong.UserName = User.Identity.Name;
        newSong.Title = originalSong.Title;
        newSong.YoutubeLink = originalSong.YoutubeLink;
        newSong.GenreId = 38;
        newSong.Date = DateTime.Now;
        repository.AddSong(newSong);

        var point = new Point();
        point.UsernameGotPoint = originalSong.UserName;
        point.UsernameGavePoint = User.Identity.Name;
        point.Date = DateTime.Now;
        point.Score = 1;
        point.CurrentFavId = id;
        repository.AddPoint(point);

        repository.Save();
        return RedirectToAction("Index");
        }
        else return JavaScript(???);
    }

вот мой JQuery Ajax:

  $(".btnAddOtherSongPoints").click(function () {
        var songId = $(this).attr("name");

        $.ajax({
            beforeSend: function () { ShowAjaxLoader(); },
            url: "/Home/AddPointAndCopyOtherSongToPlaylist/",
            type: "POST",
            data: { id: songId },
            success: function () { HideAjaxLoader(), ShowMsg("Song Added Successfully") },
            error: function () { HideAjaxLoader(), ShowMsg("Song could not be added, please try again") }
        });
    });

в зависимости от того, было ли ему разрешено указывать в качестве части успешной части моего ajax-запроса, я хочу отобразить другое сообщение, поэтому я предполагаю, что мне понадобится оператор if, чтобы проверить, не является ли объект данных null (это означает, что сервер возвратил что-то, в данном случае функцию javascript или что-то в этом роде)

Ответы [ 2 ]

1 голос
/ 08 декабря 2011

Что ж, когда вы возвращаете JavaScript из контроллера, вы смешиваете функциональность «Вид» с функциональностью «Контроллер».

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

Ваш контроллер должен только возвращать данные.Вы можете проверить данные в вашем JavaScript на наличие флага успеха и отобразить сообщение оттуда.

Редактировать :

В вашем контроллере:

    bool isSuccess = true;
   //process here
    return Json(new {Result = isSuccess}, JsonRequestBehavior.AllowGet);

В вашем JavaScript вы проверяете, есть ли Result == true.

Замените функцию успеха в вашем $ .ajax на что-то вроде этого:

success: function (result) { 
   if (!result)
     { alert('Oh nooes'); }
},
0 голосов
/ 08 декабря 2011

Почему вы не вернули логический результат в вашем ответе (с помощью метода JSON, почему бы и нет), чтобы указать, добавлена ​​ли точка или нет. А на стороне клиента проверьте это значение и покажите сообщение, если оно ложно. Как это:

var result = true;
...
return JSON(new { result } );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...