重新加载部分视图
我正在一个网站上工作,在这里你可以写和读笑话。重新加载部分视图
因此,在我的索引中,我有一个foreach,它显示了所有的笑话。显示的每个笑话都是一个PartialView。 你可以为每个笑话投票(上/下)。所以如果somone投了一个笑话,我想要他的投票重新加载的笑话的部分观点。
目前我有一个actionLink,这是一个控制器动作,在那里我检查他是否已经投了笑话,如果没有,我调用RateJoke()方法。
但后来我不知道我应该把他连接到什么视图,或者我该怎么做,以便它只是重新加载部分视图而不是整个索引。
我的索引视图:
@using (var db = new Witze.Context())
{
foreach (var joke in Model)
{
@Html.Partial("_Jokes", joke);
}
}
我_Jokes 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>
我的ActionResult向上()在HomeController的(有一个向下藏汉):
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。
也许有一个完全不同的方式来做到这一点。我愿意接受任何解决方案。
说明我想要实现的:我想要一个页面,所有的笑话都在我的数据库中。每个笑话都可以投票,如果有人投票说笑话,我想让这个笑话重新加载,而不是整个页面。
使用@Ajax.ActionLink
,并与当前的div笑话
@Model.Rating Punkte
<div id="[email protected]">
@Ajax.ActionLink("Up", "Up", "Home", new {Model.JokeId}, new AjaxOptions {UpdateTargetId="divjoke"+Model.JokeId} null)
更新中...
Ty为您的输入,但与ActionLink,在控制器我必须链接到某处,如果我链接到_Jokes它只是显示partialview,如果我链接到索引,它会加载整个页面。 你能解释我该怎么做? – WTFisOssi
允许使用链接Ajax.ActionLink而不是Html.ActionLink来只更新页面的一部分,只要你返回一个局部视图 –
试试这个类似的帖子:http://*.com/questions/17776929/refresh-only-partial- view-in-mvc4 –
你有没有想过使用ajax发布upvote或downvote行动,并成功增加或减少柜台?它在我看来你是过于复杂的事情。您的ajax方法可以通过使用jQuery的向上和向下链接触发。 – Chris