Wie kann ich dynamische ajax.actionlinks erstellen, die dynamische Teilansichten aufrufen.MVC Ajax mit dynamischer Erstellung von Teilansichten
Zum Beispiel:
- Ich habe eine Seite, die x Anzahl der Kommentare
- Jeder Kommentar kann abgestimmt bis generieren oder unten (einzeln)
- Die Anzahl der oben Stimmen und nach unten Stimmen werden in eine einzige ganze Zahl gezählt
- Jeder Kommentar div wird seine eigenen ajax.actionlink haben
- Jeder ajax.actionlink wird an die Steuerung der übergeben ID des Kommentars
- Der Controller berechnet die Gesamtstimmen und ruft die Teilansicht auf, um sie mit der richtigen ID im Div anzuzeigen.
Was habe ich bisher getan:
konnte ich erfolgreich Ajax.ActionLink
schaffen, die einen Controller anrufen und ergibt die Summe der Stimmen
Das ruft die Teilansicht auf und zeigt die Stimmen an
was das Problem ist
- Ich will nicht zu hart Code 30-100 verschiedene ajax.actionlinks 30-100 hart codierte Teilansichten zu nennen.
Wie kann ich dies dynamisch erreichen?
Bestehende Code:
Mein Ajax.ActionLink in meiner Rasierer Ansicht
@Html.Raw(Ajax.ActionLink("[replacetext]", "VoteUp",
new { UserPostID = @Model.Id },
new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "CountVote" }).ToHtmlString().Replace("[replacetext]",
"<img src=\"/Images/up_32x32.png\" />"))
Mein div innerhalb der gleichen Rasierer Ansicht, die die Ergebnisse zu der Teilansicht angezeigt werden soll.
<div id="CountVote" class="postvotes"></div>
Mein Controller
public PartialViewResult VoteUp(int UserPostID)
{
try
{
UserVotes vote = new UserVotes();
vote.SubmitedVote = 1;
vote.UserId = Convert.ToInt32(Session["id"]);
vote.UserPostID = UserPostID;
ViewBag.SumVotes = postRepository.InsertUserPostVote(vote);
}
catch (Exception e)
{
xxx.xxx.xxxx().Raise(e);
}
return PartialView("_TotalVotes");
}
Und schließlich meine Teilansicht (_TotalVotes.cshtml)
@ViewBag.SumVotes
Jetzt für Viewpost meine Hauptansicht zeigt die Kommentare in einer Schleife die viewbag verwenden.
foreach (var item in (List<UserComment>)ViewData["Comments"])
{
CommentVote = "cv" + i.ToString();
<div class="postlinewrapper">
<div class="postvotesframe">
<div class="postvotes">
@Html.Raw(Ajax.ActionLink("[replacetext]", "VoteUp",
new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "CountVote" }).ToHtmlString().Replace("[replacetext]",
"<img src=\"/Images/up_32x32.png\" />"))
</div>
<div id="@CommentVote" class="@CommentVote">0</div>
<div class="postvotes">
@Html.Raw(Ajax.ActionLink("[replacetext]", "VoteDown",
new AjaxOptions { HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "CountVote" }).ToHtmlString().Replace("[replacetext]",
"<img src=\"/Images/down_32x32.png\" />"))
</div>
</div>
<div class="postleftbar">
@Html.Raw(item.Comment)
</div>
<div class="postrightbar">
<div>
<div class="post_spec">
<div class="post_spec_title">Call Sign: </div>
<div class="post_spec_detail">@item.CallSign</div>
</div>
<div class="post_spec">
<div class="post_spec_title">When: </div>
<div class="post_spec_detail">@item.CommentDate.ToString("dd/MM/yyyy")</div>
</div>
</div>
<br />
<br />
</div>
</div>
i += 1;
}
ich die Login umgesetzt haben Stimmen zu erhöhen oder verringern nach oben und unten:
public PartialViewResult VoteUp(int userPostId)
{
try
{
UserVotes vote = new UserVotes();
vote.SubmitedVote = 1;
vote.UserId = Convert.ToInt32(Session["id"]);
vote.UserPostID = userPostId;
ViewBag.SumVotes = postRepository.InsertUserPostVote(vote);
}
catch (Exception e)
{
xxxx.xxxx.xxxx().Raise(e);
}
return PartialView("_TotalVotes");
}
public PartialViewResult VoteDown(int userPostId)
{
try
{
UserVotes vote = new UserVotes();
vote.SubmitedVote = -1;
vote.UserId = Convert.ToInt32(Session["id"]);
vote.UserPostID = userPostId;
ViewBag.SumVotes = postRepository.InsertUserPostVote(vote);
}
catch (Exception e)
{
xxx.xxxx.xxxx().Raise(e);
}
return PartialView("_TotalVotes");
}
Das ist aber alles Code funktioniert für 1 Ajax-Aufruf ganz gut, aber was ich brauche, ist, getrennte Ajax anzuzeigen ruft separate divs dynamisch auf.
Der Behälter (div mit ID) ist ein Teil der Teilansicht? Ich bin mir nicht sicher, ob ich die Frage verstehe (vielleicht Beispielcode einbeziehen?) –
Nein. Also ruft der Link Ajax.Action eine Aktion auf, die im Gegenzug eine Teilansicht aufruft, die ein div auffüllt. Das Problem besteht darin, divs und partielle Views on the fly basierend darauf zu erstellen, wie viele benötigt werden. Ich werde später einen Beispielcode veröffentlichen. –
Sie entwachsen Ajax Helpers. Sie möchten wirklich eine Javascript MVC Sprache wie AngularJS oder EmberJS. Mit einem robusten Template-Framework können Ihre Viewdaten an JS-Variablen gekoppelt werden. Daher kann derselbe Aufruf an einen Endpunkt zur Registrierung einer Abstimmung auch eine Stimmenanzahl zurückgeben. Nachdem Sie Ihre JS-Variablen mit Vote-Count aktualisiert haben, kann Ihre View die neuen Daten ohne DOM-Manipulation oder -Laden widerspiegeln. –