2010-12-14 46 views
0

J'utilise ASP.NET MVC 3 avec le moteur de vue rasoir.Méthode non déclenchée depuis la vue rasoir

J'ai la méthode suivante dans mon NewsController:

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

    return jsonResult; 
} 

À mon avis, je veux essayer et appeler cette méthode pour remplir mon YUI DataTable. J'ai mis un point d'arrêt sur la première ligne de cette méthode mais le point d'arrêt n'est pas atteint. Voici mon code en vue d'appeler cette méthode:

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

J'ai même essayé:

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

Les deux ne semblent pas fonctionner.

Voici mon code datatable:

<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> 

Qu'est-ce que je fais mal?

Répondre

1

Ne pas oublier de faire ce retour de la méthode JSON pour les requêtes GET ainsi:

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

également un réglage datasource ne signifie pas qu'il invoquera la méthode. Il y a peut-être une autre partie de votre code qui pose problème. Installez FireBug et vérifiez si une requête AJAX est envoyée.


MISE À JOUR:

Maintenant que la question a été clarifiée et vous parlez de YUI DataTable, voici un exemple de travail complet:

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); 
    } 
} 

Voir (~/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: Merci. De quoi ai-je besoin pour savoir si une requête AJAX a été envoyée? Quoi d'autre dois-je configurer sur mon application pour le faire fonctionner? –

+0

@Brendan, une fois que vous installez FireBug, vous pouvez regarder la console ou l'onglet Net. Toutes les demandes seront listées ici. En ce qui concerne ce que vous devez définir, je ne peux pas répondre à cette question car vous n'avez même pas expliqué ce que vous essayiez de faire. Je vous recommande de regarder la documentation et les multiples exemples de YUI si c'est ce que vous avez l'intention d'utiliser. Je pense que votre question n'a rien à voir avec ASP.NET MVC. Il s'agit de savoir comment utiliser YUI. –

+0

@Darin: J'essaie de ramener des nouvelles et de remplir mon datatable. C'est tout. Je dois essayer de déterminer pourquoi mes données ne sont pas ramenées. C'est ce que j'essaie de faire. –