只重新加载部分视图
本文关键字:视图 加载 新加载 | 更新日期: 2023-09-27 17:50:51
我在做一个网站,在那里你可以写和读笑话。
在我的索引中,我有一个foreach,它显示了所有的笑话。显示的每个笑话都是一个PartialView。你可以给每个笑话投票(上/下)。因此,如果有人投票给一个笑话,我想要他投票的笑话的部分视图重新加载。
目前我有一个actionLink,去到一个控制器动作,在那里我检查他是否已经投票的笑话,如果没有,我调用RateJoke()方法。
但是我不知道我应该把他链接到什么视图,或者我应该怎么做,所以它只是重新加载部分视图,而不是整个索引。
My Index View:
@using (var db = new Witze.Context())
{
foreach (var joke in Model)
{
@Html.Partial("_Jokes", joke);
}
}
My _joke PartialView
@Model.Rating Punkte
@Html.ActionLink("Up", "Up", "Home", new {Model.JokeId}, null)
@Html.ActionLink("Down", "Down", "Home", new {Model.JokeId}, null)
<div class="anzeige">
<div>@Model.JokeText</div>
</div>
<div class="left">
@foreach (var categories in Model.Categories)
{
@Html.ActionLink(categories.Name, "jokes", "categorie", new {categories.CategorieId}, null)
}
</div>
<div class="right">
von: @Model.Creator.Name um: @Model.Date
</div>
My ActionResult Up()在HomeController(也有一个down):
public ActionResult Up(int jokeId)
{
int LoggedInUserId = WebSecurity.CurrentUserId;
var LoggedInUser = db.User.Single(u => u.UserId == LoggedInUserId);
ICollection<Joke> VotedJokes = LoggedInUser.Voted;
bool voted = false;
foreach (var VotedJoke in VotedJokes)
{
if (VotedJoke.JokeId == jokeId)
{
voted = true;
}
}
if (voted == false)
{
Logik.RateJoke(true, jokeId, LoggedInUserId);
}
Joke joke = db.Jokes.Single(j => j.JokeId == jokeId);
return PartialView("_Jokes", joke);
}
谁能帮我解释一下我该怎么做?我对MVC很陌生。
也许有一种完全不同的方法。我愿意接受任何解决方案。
解释我想要实现的:我想要一个页面,在我的DB所有的笑话。每个笑话都可以投票,如果有人投票给一个笑话,我希望这个笑话被重新加载,而不是整个页面。
使用@Ajax.ActionLink
并更新为当前的div joke
@Model.Rating Punkte
<div id="divjoke@Model.JokeId">
@Ajax.ActionLink("Up", "Up", "Home", new {Model.JokeId}, new AjaxOptions {UpdateTargetId="divjoke"+Model.JokeId} null)
…