Метод не запускается из вида бритвы
Я использую 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 ответ
Не забудьте заставить этот метод возвращать 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>