使用 ajax 显示列表
Display list using ajax
为什么点击按钮后它什么都不显示。并且它不会调用BooksByPublisherId
.我错过了什么?如何解决这个问题?
控制器
public class FoodController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpGet]
public JsonResult BooksByPublisherId(int id)
{
IList<BookModel> modelList = new List<BookModel>();
modelList.Add(new BookModel { Author = "Jhon", Year = "1970" });
modelList.Add(new BookModel { Author = "Nick", Year = "1977" });
modelList.Add(new BookModel { Author = "Joseph", Year = "1978" });
return Json(modelList, JsonRequestBehavior.AllowGet);
}
}
型
public class BookModel
{
public string Title { get; set; }
public string Author { get; set; }
public string Year { get; set; }
public decimal Price { get; set; }
}
视图
@{
ViewBag.Title = "Index";
}
<script src="~/Scripts/knockout-2.2.0.js"></script>
<h2>Index</h2>
<button data-bind="click: capitalizeLastName">Load list</button>
<div class="results">Wait for list</div>
<script>
function AppViewModel() {
this.capitalizeLastName = function () {
debugger;
$.ajax({
cache: false,
type: "GET",
url: "Food/BooksByPublisherId",
data: { "id": id },
success: function (data) {
var result = "";
$.each(data, function (id, book) {
result += '<b>Title : </b>' + book.Title + '<br />' +
'<b> Author :</b>' + book.Author + '<br />' +
'<b> Year :</b>' + book.Year + '<br />' +
'<b> Price :</b>' + book.Price + '<hr />';
});
$('.results').html(result);
},
error: function (response) {
debugger;
alert('eror');
}
});
}
}
ko.applyBindings(new AppViewModel());
</script>
我在你的代码中看到的唯一问题是,你正在使用一个名为 id
的变量来构建你作为 ajax 调用数据发送的 js 对象,但它没有声明和初始化它的任何值。在这种情况下,您将获得一个脚本错误,例如
未捕获的引用错误:未定义 id
由于此脚本错误,您的其他js代码将无法正常工作!如您所见,错误是不言自明的。只需声明一个变量id
并为其设置一些值即可。
var id = 911;
$.ajax({
type: "GET",
url: "Food/BooksByPublisherId",
data: { "id": id },
// Your existing code
});
另外,我看到您已经硬编码了操作方法的路径。更好的方法是使用 Html 帮助程序方法(如Url.Action
方法)生成操作方法的正确相对路径。
url: "@Url.Action("BooksByPublisherId","Food")",
如果您的 js 代码位于剃须刀视图中,这将起作用。如果您的代码位于外部 js 文件中,您可以使用本文中解释的解决方案。
相关文章:
- 引导程序下拉列表显示不正确
- 使用2个下拉列表显示/隐藏分区
- 条件过滤列表显示在angularjs中
- 如果字符串位于iframe之后,则不会使用引导程序列表显示
- 触发 html5 输入数据列表下拉列表显示
- AngularJS 10 $digest() 迭代在列表显示时达到
- 使用下拉列表显示/隐藏
- 我有一个列表显示 1、2、3 个数字,我可以将它们转换为乌尔都语吗?
- 使用 Javascript (CodeCademy) 制作更好的联系人列表显示
- 通过选择一个下拉列表显示两个不同的值
- 尝试根据单击复选框列表显示/隐藏输入
- 将 JavaScript 对象列表显示为 HTML 列表项
- 将列表显示为二叉树
- 将(非/有序)HTML列表显示为自顶向下的树状结构的最佳方式是什么?
- JavaScript链式下拉列表显示/隐藏一个Div
- 为什么我的角列表显示不出来
- 用动态列表显示getelementsbyclassname值
- 如何改变悬停列表显示/关闭Magento社区
- 使用本地存储在自定义列表显示中保存更改
- 下拉列表显示[对象对象],而不是使用击倒值