2016-04-19 6 views
1

Ich arbeite an einer ASP.Net MVC 4-Anwendung und versuche, eine einzelne Datenzeile aus der Datenbank statt aller Zeilen anzuzeigen.ASP.Net MVC 4 Anzeige einzelner Datenzeilen mit Taste

Die Website, die ich entwerfe, hat eine Liste von Schaltflächen, und wenn jede Schaltfläche geklickt wird, werden die Daten aus der entsprechenden Zeile in der Datenbank angezeigt, z. Button1 - Row1, Button2 - Row2 etc ...

Derzeit wird diese auch auf http://myexample/Movies/OneMovie angezeigt Ich würde es gerne auf http://myexample/Movies/

angezeigt werden, der Code, den ich in meinem Controller haben, ist dies:

public ActionResult OneMovie(int id = 0) 
{ 
    Movie movie = db.Movies.Single(m => m.ID == id); 

    if (movie == null) 
    { 
     return HttpNotFound(); 
    } 

    return View(movie); 
} 

der Knopf für meinen Code:

<input id="Button1" type="button" value="button" name="id"/> 
<input id="Button2" type="button" value="button" name="id"/> 

Kann jemand mir helfen, meine Daten für die entsprechende Zeile angezeigt wird, wenn die Schaltfläche geklickt wird?

+0

Sie wollen Sind Umleiten zu einer Ansicht, um die Details anzuzeigen oder zeigen Sie die Details auf derselben Seite an? –

+0

gibt es viele Möglichkeiten, das zu tun. Meinst du wie man "OneMovie" von Button oder? –

+0

Ich möchte die Daten auf der gleichen Seite wie die Schaltfläche angezeigt werden. Aktuell geht es zu Movies/OneMovie, ich würde gerne auf den Movies welche auf der Indexseite stehen. – TerrorTot38

Antwort

1

ok dann, wenn Sie die Tasten erzeugen Sie Schleife eine Sammlung nur die IDs aller Filme zu bekommen, hier ist die Taste, die Sie benötigen:

<input type="button" value="Go Somewhere Else" onclick="location.href='@Url.Action("OneMovie", "ControllerName", new { id=1 })'" /> 

gesetzt in Ihre Ansicht id = model.MovieId

dies ermöglicht es Ihnen, einen GET-Request an der Aktion zu machen:

public ActionResult OneMovie(int id) 
    { 

     return View(); 
    } 

bearbeiten für eine Ajax erhalten Lösung

in der Index-Seite:

function getMovieById(movieId) { 
    var url = "/Home/OneMovie"; 
    $.getJSON(url, { id: "movieId"}, function (data) { 
     /* 
     put movie into div here 
     */ 
    }); 
} 

Ihre Schaltfläche aussehen wird:

<input type="button" value="Go Somewhere Else" onclick=getMovieById(1) /> 

und die Aktion:

public JsonResult OneMovie(int Id) 
{ 
... 
var items = db.Movies.Where... 
return Json(items , JsonRequestBehavior.AllowGet); 
} 
+0

Kann ich den Index auf dieselbe Weise wie OneMovie verwenden? – TerrorTot38

+0

Momentan kann ich keine Daten auf meiner Indexseite anzeigen. In dem ich dieses Stück Code hatte - return View (db.Movies.ToList()); – TerrorTot38

+0

der Index soll von URL aufgerufen werden. In dem, was ich verstehe, denke ich, können Sie für etwas wie gehen: In Index laden, laden Sie den ersten Film und die Tasten für alle von ihnen. Klicken Sie dann auf jede Schaltfläche, um eine Teilansicht in dem Teil von div anzuzeigen, an dem Sie gerade gearbeitet haben. –

0
public class MoviesModel 
{ 
    public List<Movie> Movies {get;set;} 
} 

    //get all movies and return to view 
    public ActionResult AllMovies() 
    {  
     MoviesModel model=new MoviesModel(); 
     model.Movies= db.Movies.ToList(); 
     if (model.Movies== null || model.Movies.Count==0) 
     { 
      return HttpNotFound(); 
     } 

     return View(model); 
    } 


//html view 
    @model MoviesModel 
    @foreach(var movie in Model.Movies){ 
     <input id="Button1" type="button" value="button" name="movie.Id" onclick="ButtonClicked(movie.Id)"/> 
     <div class="hidden" id='movie.Id'> 
      <span>...movie info...</span> 
     </div> 
    } 

//javascript 

function ButtonClicked(id) 
{ 
    var element= Document.GetEllementById(id) 
    //set css class visible 
} 


//CSS 
.visible 
{ 
display:block; 
} 

.hide 
{ 
display:none; 
} 
+0

Ich habe gerade diese Lösung versucht, aber wie funktioniert es mit einem Knopf? – TerrorTot38

+0

Dies ist ungefähr das Setup, hier ist kein MVC-Projekt geöffnet. Aber ich denke, es sollte alles funktionieren ... Sie brauchen nur das Onclick-Event. Wenn Sie jQuery verwenden, können Sie auch ein wenig Animation hinzufügen –