我正在开发一个用户可以向其他用户添加积分的网站,但是一旦用户向其他特定用户添加了积分,他就无法向同一个用户添加积分。所以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函数或类似的东西)
答案 0 :(得分:1)
好吧,当您从控制器返回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'); }
},
答案 1 :(得分:0)
为什么不在响应中返回布尔结果(Whith JSON方法为什么不),以指示是否添加了点。在客户端,验证此值并显示消息,如果它是错误的。像这样:
var result = true;
...
return JSON(new { result } );