2010-12-14 11 views
0

Ich benutze ASP.NET MVC 3 mit der Rasiermesseransichtmaschine.Methode, die nicht von der Rasiereransicht ausgelöst wird

Ich habe die folgende Methode in meinem Newscontroller:

public JsonResult GetAllNews() 
{ 
    var items = newsService.FindAll(); 
    var jsonResult = Json(items); 

    return jsonResult; 
} 

Aus meiner Sicht Ich möchte diese Methode versuchen, und rufen zu meinen YUI Datatable zu füllen. Ich setze einen Haltepunkt in die erste Zeile dieser Methode, aber der Haltepunkt wird nicht getroffen. Hier ist mein Code in der Ansicht, diese Methode zu nennen:

var newsDataSource = YAHOO.util.DataSource('@Url.Action("GetAllNews");'); 

Ich habe sogar versucht:

var newsDataSource = YAHOO.util.DataSource("/News/GetAllNews/"); 

Beide nicht zu funktionieren scheinen.

Hier ist meine Datentabelle Code:

<div id="grdNews"></div> 

<script type="text/javascript"> 
    // News grid 
    var newsColumnDefs = [ 
     { key: "id", label: "Identifier" }, 
     { key: "title", label: "Title" }, 
     { key: "body", label: "Body" } 
    ]; 

    //var newsDataSource = YAHOO.util.DataSource('@Url.Action("GetAllNews");'); 
    var newsDataSource = YAHOO.util.DataSource("/News/GetAllNews/"); 
    newsDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON; 
    newsDataSource.responseSchema = { 
     fields: [ 
     { key: "id" }, 
     { key: "title" }, 
     { key: "body" } 
     ] 
    }; 

    var myDataTable = new YAHOO.widget.DataTable("grdNews", newsColumnDefs, newsDataSource); 
</script> 

Was mache ich falsch?

Antwort

1

Vergessen Sie nicht, auch diese Methode Rückkehr JSON für GET-Anfragen zu machen:

public JsonResult GetAllNews() 
{ 
    var items = newsService.FindAll(); 
    return Json(items, JsonRequestBehavior.AllowGet); 
} 

Auch Setzen eines datasource bedeutet nicht, dass sie berufen sich auf die Methode. Vielleicht ist ein anderer Teil Ihres Codes problematisch. Installieren Sie FireBug und sehen Sie, ob eine AJAX-Anfrage gesendet wird.


UPDATE:

Nun, da die Frage geklärt ist, und Sie sprechen über YUI Datatable, hier ist ein voll funktionierendes Beispiel:

Controller:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    public ActionResult GetAllNews() 
    { 
     var news = new[] 
     { 
      new { id = 1, title = "title 1", body = "body 1" }, 
      new { id = 2, title = "title 2", body = "body 2" }, 
      new { id = 3, title = "title 3", body = "body 3" }, 
     }; 
     return Json(new 
     { 
      Result = news 
     }, JsonRequestBehavior.AllowGet); 
    } 
} 

Ansicht (~/Views/Home/Index.cshtml):

@{ 
    ViewBag.Title = "Home Page"; 
} 

<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.8.2r1/build/fonts/fonts-min.css" /> 
<link rel="stylesheet" type="text/css" href="http://yui.yahooapis.com/2.8.2r1/build/datatable/assets/skins/sam/datatable.css" /> 
<script type="text/javascript" src="http://yui.yahooapis.com/2.8.2r1/build/yahoo-dom-event/yahoo-dom-event.js"></script> 
<script type="text/javascript" src="http://yui.yahooapis.com/2.8.2r1/build/connection/connection-min.js"></script> 
<script type="text/javascript" src="http://yui.yahooapis.com/2.8.2r1/build/json/json-min.js"></script> 
<script type="text/javascript" src="http://yui.yahooapis.com/2.8.2r1/build/element/element-min.js"></script> 
<script type="text/javascript" src="http://yui.yahooapis.com/2.8.2r1/build/datasource/datasource-min.js"></script> 
<script type="text/javascript" src="http://yui.yahooapis.com/2.8.2r1/build/datatable/datatable-min.js"></script> 

<script type="text/javascript"> 
    var newsColumnDefs = [ 
     { key: "id", label: "Identifier" }, 
     { key: "title", label: "Title" }, 
     { key: "body", label: "Body" } 
    ]; 

    var newsDataSource = new YAHOO.util.DataSource('@Url.Action("GetAllNews")'); 
    newsDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON; 
    newsDataSource.responseSchema = { 
     resultsList: 'Result', 
     fields: [ "id", "title", "body" ] 
    }; 

    var myDataTable = new YAHOO.widget.DataTable("grdNews", newsColumnDefs, newsDataSource); 
</script> 

<div id="grdNews"></div> 
+0

@Darin: Danke. Auf was muss ich achten, wenn eine AJAX-Anfrage gesendet wurde? Was muss ich noch in meiner App einrichten, damit es funktioniert? –

+0

@ Brendan, wenn Sie FireBug installiert haben, können Sie sich die Registerkarte Konsole oder Net ansehen. Alle Anfragen werden dort aufgelistet. Soweit das, was Sie festlegen müssen, kann ich diese Frage nicht beantworten, da Sie nicht einmal erklärt haben, was Sie zu tun versuchten. Ich würde Ihnen empfehlen, sich die Dokumentation und die verschiedenen Beispiele von YUI anzuschauen, wenn Sie beabsichtigen, dies zu verwenden. Ich denke, dass Ihre Frage nichts mit ASP.NET MVC zu tun hat. Es geht darum, wie man YUI benutzt. –

+0

@Darin: Ich versuche, Nachrichten zu bringen und meine Datentabelle bevölkern. Das ist es. Ich muss versuchen zu bestimmen, warum meine Daten nicht zurückgebracht werden. Das versuche ich zu tun. –

Verwandte Themen