【问题标题】:Loading data in a Kendo Window with AJAX when a link is clicked单击链接时使用 AJAX 在 Kendo 窗口中加载数据
【发布时间】:2016-02-21 06:14:22
【问题描述】:

我有一个 mvc razor 页面,其中使用 razor foreach 循环列出了几个产品项目:

@foreach (var product in Model)
{
    <h2>@product.Title</h2>
    <div>product.Description</div>

    <a href="#" class="lnkViewRatings">View Reviews</a>
}

我的目标: 单击带有 css 类“lnkViewReviews”的任何链接时,我希望打开剑道窗口并使用 ajax 请求显示该产品的所有评论列表。该请求将是 GET 类型,并且根据单击链接的产品,数据参数将是 productId。

这正是我想要的(请告诉我是否还有更好的方法):

  1. 用户点击所列产品之一的查看评论链接。
  2. 会打开一个对话窗口,并在我可以指定的某种模板中拉入该产品评论的列表。

以下是我根据剑道文档进行的尝试,但我遇到了问题。你能告诉我一个实现这一目标的好方法吗?

HTML

<div id="dialog">
    <p>This is static text in my dialog window</p>
</div>

JavaScript

$("#dialog").kendoWindow({
    visible: false
});
var dialog = $("#dialog").data("kendoWindow");

$(".lnkViewReviews").click(function (e) {
    e.preventDefault();

    dialog.refresh({
        url: "/Products/GetReviews",
        data: { productId: $(this).attr('data-product-Id') },
    });

    dialog.open().center();
});

asp.net MVC 控制器动作方法:

public IActionResult GetReviews(int productId)
{
    var prodReviews = _repository.GetProductReviews(productId);

    return Json(prodReviews);
}

【问题讨论】:

  • but I am having problems。问题是什么 ?错误信息?
  • 没有具体的错误消息,但没有任何工作正常。看起来我在正确的轨道上吗?我正在尝试弄清楚如何使用模板在窗口中列出返回的数据,以及如何将产品 ID 传递给点击事件。
  • 你的问题只是传递了procuctId吗?我认为您的其余代码看起来不错。

标签: javascript jquery asp.net-mvc kendo-ui kendo-window


【解决方案1】:

From your comments

如何将产品ID传递给点击事件。

您可以使用新的 data-* 属性来保存任何元素中的值。

 @foreach (var product in Model)
    {
        <h2>@product.Title</h2>
        <div>product.Description</div>

        <a href="#" data-product-Id="@product.Id" class="lnkViewRatings">View Reviews</a>
    }

你的 Jquery 可以是

$(".lnkViewReviews").click(function (e) {
    e.preventDefault();

    dialog.refresh({
        url: "/Products/GetReviews",
        data: { productId: $(this).attr('data-product-Id') } //You can retrieve product Id from the element itself
    });

    dialog.open().center();
});

【讨论】:

  • 你真的帮助我解决了我的一个问题。我不知道新的数据属性。当使用 jQuery 时,这将是一个救命稻草。在此之前,我在做类似 onclick="return myFunction(@product.Id)" 之类的事情。我想我现在唯一需要弄清楚的是如何使用剑道模板系统列出所有产品评论窗户。到目前为止,我在窗口中看到了 json。
  • 你最初得到的窗口是正确的吗?就像通过硬编码剑道演示网站中的值一样?
  • 不确定你的意思,但不仅是当用户点击我想在 dialog.refresh 中添加模板的链接时。这是我正在查看的文档:docs.telerik.com/kendo-ui/api/javascript/ui/… 我相信我只需要弄清楚如何对 json 数据进行 forloop 并输出我需要的内容。这是我正在查看的其他文档:docs.telerik.com/kendo-ui/api/javascript/ui/… 但是,它们仅显示简单的模板示例。我有一个产品评论列表作为我的数据的 json。
  • 是的,我明白了,看看这个例子demos.telerik.com/kendo-ui/window/index 并确保它首先工作。稍后您可以使其仅在用户点击时打开。
  • 是的,我让它像基本示例一样使用我指定为窗口的任何 div 来初始化窗口。唯一的区别是我删除了 .data("kendoWindow").center().open();因为我不想像他们那样在页面加载时这样做。我更新了我的代码以显示我目前拥有的确切 JavaScript。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 2016-06-13
  • 1970-01-01
  • 2013-09-12
  • 2015-10-14
  • 2015-04-18
相关资源
最近更新 更多