2013-03-01 7 views
5

Ich habe ASP.NET Forms für einige Zeit entwickelt und versuche jetzt, MVC zu lernen, aber es ist nicht total sinnvoll, wie es zu tun, was ich will. Vielleicht muss ich über Dinge anders nachdenken. Hier ist, was ich mit einem erfundenen Beispiel versuche:MVC 4 Teilweise mit separatem Controller und View

Ziel - Verwenden Sie eine partielle Datei, die an beliebiger Stelle auf der Website platziert werden kann, die einen Parameter akzeptiert. Dieser Parameter wird verwendet, um zur Datenbank zu gehen und das resultierende Modell an die Ansicht zurückzugeben. Die Ansicht zeigt dann eine oder mehrere der Modelleigenschaften an.

Dies ist nicht mein Code, sondern zeigt, was ich versuche zu tun.

Datei: Controller/UserController.cs

[ChildActionOnly] 
public ActionResult DisplayUserName(string userId) 
{ 
MyDataContext db = new MyDataContext() 

var user = (from u in db.Users where u.UserId = userId select u).FirstOrDefault(); 

return PartialView(user); 
} 

Datei: Views/Shared/_DisplayUserName.cs

@model DataLibrary.Models.User 

<h2>Your username is: @Model.UserName</h2> 

Datei: Views/About/Index.cshtml

@{ 
    ViewBag.Title = "About"; 
} 

<h2>About</h2> 

{Insert Statement Here} 

Ich weiß, an dieser Stelle muss ich eine teilweise namens DisplayUserName, aber wie weiß es, welche Ansicht zu verwenden und wie mache ich Übergeben Sie meine userId an die partielle?

Es ist, was ich erwarte, ist eine sehr grundlegende Frage, aber ich bin noch zu finden, ein Tutorial, das dies abdeckt.

Vielen Dank im Voraus für Ihre Hilfe.

Antwort

6

sollten Sie rufen Html.Action oder Html.RenderAction wie:

@Html.Action("DisplayUserName", "User", new {userId = "pass_user_id_from_somewhere"}); 

Ihre Aktion sollte wie:

[ChildActionOnly] 
public ActionResult DisplayUserName(string userId) 
{ 
    MyDataContext db = new MyDataContext() 

    var user = (from u in db.Users where u.UserId = userId select u).FirstOrDefault(); 

    return PartialView("_DisplayUserName", user); 
} 

Diese den Trick tun sollten.

+0

Danke für die schnelle Antwort & richtige Antwort - es hat funktioniert! Ich habe so viele Abweichungen auf der Struktur und @ html.Options versucht, aber keiner hat funktioniert. Ich wusste, es wäre einfach, wenn Sie wissen, wie! Nochmals vielen Dank für Ihre Hilfe. – McGaz

1

Ich vergewissere mich immer, den MyDataContext zu schließen ... Vielleicht alles in eine using-Anweisung einschließen ... Wenn Sie bemerken, wenn VS es für Sie tut, erstellen sie die Entität als private Variable in der Controller-Klasse (außerhalb der Controller) und schließe sie dann mit der dispose-Methode ... Wie auch immer, ich glaube, du musst sicherstellen, dass diese Ressourcen freigegeben werden, damit die Dinge reibungslos funktionieren. Ich weiß, dass es nicht in der Frage steht, aber ich sah, dass es verletzlich aussah.

Verwandte Themen