ASP.NET MVC: Daten zur View Masterpage übergeben
Ich stand gerade vor der Aufgabe, die UserTimeline eines Twitter Accounts auf einer ASP.NET MVC Masterpage anzuzeigen.
Dabei muss die Masterpage irgendwie an die Daten kommen, die sie anzeigen will.
Eine naive Suche bringt mich mit dem ersten Ergebnis sofort ans Ziel:
=> Passing Data to View Master Pages
Dort stellen sie zwei Möglichkeiten vor.
Bei der ersten wird vorgeschlagen im Konstruktor jedes Controllers die benötigten Daten in das ViewData-Dictionary zu übergeben.
Das wird natürlich mühsam und bei einer Änderung können alle Controller angefasst werden.
Die zweite Möglichkeit schlägt einen abstrakten Basiscontroller vor, in dessen Konstruktor das ViewData-Dictionary gefüllt wirde.
Eine gute Lösung und die Änderung findet an einer Stelle statt.
Alle Controller müssen dann von dem abstrakten Controller erben, dabei wird jedesmal dessen Konstruktor ausgeführt und die Daten übergeben.
Ein solcher Controller könnte bspw. so aussehen:
namespace Netkk.Controllers
{
public abstract class ApplicationController : Controller
{
public ApplicationController() {
ITwitterRepository repository = new TwitterRepository();
IEnumerable<string> formattedTweets = repository.GetFormattedUserTimeLine(
"username",
"password",
4);
ViewData["userTimeLine"] = formattedTweets;
}
}
}
Und im Masterpage View kann kann über das Dictionary darüber iteriert werden:
<%
foreach(string formattedTweet in (IEnumerable<string>)ViewData["userTimeLine"]) {
%>
<p>
<%= formattedTweet %>
</p>
<%
}
%>
Ist dagegen etwas auszusetzen oder gibt es eine bessere Lösung?