【问题标题】:How to send parameters to Action from javascript function?如何从javascript函数向Action发送参数?
【发布时间】:2017-05-01 12:09:22
【问题描述】:

我有一个显示数据表的简单视图,我想在 AJAX 单击标题时对其其中一个列进行排序,我是 AJAX 和 JS 的新手,所以这是我在视图中的尝试:

<table id="tbl" class="table">
    <tr>
        <th>
            <a style="cursor: pointer" onclick="getData('desc')" id="sort">Title</a>
        </th>
        <th>
            Author
        </th>
        <th></th>
    </tr>
</table>

@section scripts{
    <script type="text/javascript">
        $(document).ready(getData('asc'))
        function getData(sort) {
            var srt = sort;
            $.ajax({
                type: 'GET',
                url: '/Book/BooksData/' + srt,
                dataTtype: 'json',
                success: function (data) {
                    $("#tbl > tr").remove();
                    $.each(data, function (index, val) {
                        $('#tbl').append('<tr><td>' + val.Title + '</td><td>' + val.Author.Name + '</td></tr>')
                    });
                }
            });
        }
    </script>
}

但是当我单击标题时,sort 参数在操作中变为空,

public JsonResult BooksData(string sort)
{
    var books = new List<Book>();
    if (sort == "asc") books = db.Books.Include(b => b.Author).OrderBy(b => b.Title).ToList();
    else books = db.Books.Include(b => b.Author).OrderByDescending(b => b.Title).ToList();

    return Json(books, JsonRequestBehavior.AllowGet);
}

是的,我做错了,但是我修改了很多次,除了在JavaScript中传递参数与C#不同之外,我看不到逻辑错误

【问题讨论】:

  • 除非你已经为"Book/BooksData/{sort}定义了指定路由,那么你需要将值添加为查询字符串值,而不是路由值
  • 是的,我忘了:(

标签: javascript c# jquery ajax asp.net-mvc


【解决方案1】:

这是最简单的方法。您需要使用query 字符串将sort 值连接到url

现在,当您单击标题时,排序参数必须与您在操作中的值一致。

请试试这个:

$.ajax({
      type: 'GET',
      url: '/Book/BooksData?sort=' + srt,
      dataType: 'json',
      success: function (data) {
          $("#tbl > tr").remove();
          $.each(data, function (index, val) {
              $('#tbl').append('<tr><td>' + val.Title + '</td><td>' + val.Author.Name + '</td></tr>')
          });
      }
});

另一种方法是使用这个:

url: '@Url.Action("BooksData","Book")?sort=' + srt

@Url.Action 只返回一个字符串。

Razor 中,每个使用@ 块的内容都会自动由Razor 进行HTML 编码。

【讨论】:

  • 谢谢,可以了,好像忘记了查询字符串!
  • @MohamedAhmed,不要忘记接受我的回答以帮助其他人。
  • 是否可以在 JS 中编写类似:var xx=zz=="foo"?"bar":"bar2"
  • @MohamedAhmed,是的,这是可能的。它被称为conditional (ternary) 运算符。
  • 或按设计url: '@Url.Action("BooksData","Book")', data: { sort: srt }, ....
猜你喜欢
  • 2020-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-01
  • 1970-01-01
  • 2019-12-04
  • 2020-03-06
  • 2019-07-09
相关资源
最近更新 更多