重新加载部分视图

问题描述:

我正在一个网站上工作,在这里你可以写和读笑话。重新加载部分视图

因此,在我的索引中,我有一个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。

也许有一个完全不同的方式来做到这一点。我愿意接受任何解决方案。

说明我想要实现的:我想要一个页面,所有的笑话都在我的数据库中。每个笑话都可以投票,如果有人投票说笑话,我想让这个笑话重新加载,而不是整个页面。

+0

试试这个类似的帖子:http://*.com/questions/17776929/refresh-only-partial- view-in-mvc4 –

+0

你有没有想过使用ajax发布upvote或downvote行动,并成功增加或减少柜台?它在我看来你是过于复杂的事情。您的ajax方法可以通过使用jQuery的向上和向下链接触发。 – Chris

使用@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) 

更新中...

+0

Ty为您的输入,但与ActionLink,在控制器我必须链接到某处,如果我链接到_Jokes它只是显示partialview,如果我链接到索引,它会加载整个页面。 你能解释我该怎么做? – WTFisOssi

+0

允许使用链接Ajax.ActionLink而不是Html.ActionLink来只更新页面的一部分,只要你返回一个局部视图 –