Метод не запускается из вида бритвы - PullRequest
0 голосов
/ 14 декабря 2010

Я использую ASP.NET MVC 3 с механизмом просмотра бритвы.

В моем NewsController есть следующий метод:

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

   return jsonResult;
}

На мой взгляд, я хочу попробовать и вызвать этот метод, чтобы заполнить мою таблицу данных YUI. Я поставил точку останова в первой строке этого метода, но точка останова не достигнута. Вот мой код для вызова этого метода:

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

Я даже попробовал:

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

Кажется, что оба не работают.

Вот мой код данных:

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

Что я делаю не так?

1 Ответ

1 голос
/ 14 декабря 2010

Не забудьте сделать так, чтобы этот метод возвращал JSON и для запросов GET:

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

Также установка источника данных не означает, что он вызовет метод.Может быть, есть какая-то другая часть вашего кода, которая проблематична.Установите FireBug и посмотрите, отправлен ли запрос AJAX.


ОБНОВЛЕНИЕ:

Теперь, когда вопрос прояснен, и вы говорите о YUI с датой, вотполный рабочий пример:

Контроллер:

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

Просмотр (~/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>
...