【问题标题】:How to retrieve one record at a time from SQL Server database in MVC using button click如何使用按钮单击从 MVC 中的 SQL Server 数据库一次检索一条记录
【发布时间】:2015-02-04 16:04:01
【问题描述】:

我想通过单击按钮从数据库中逐一显示记录。这是我在控制器中的操作方法

public ActionResult ApplyJobs(int? id, int x)
{
    TblConsultancies consultancyJobs = _obj.TblConsultancies.ToList().Skip(x).FirstOrDefault();
    return View(consultancyJobs);
}

JQuery AJAX 代码:

 <script>
        var numberofRecords;
        $(document).ready(function () { 
            numberofRecords = 1;
        },
            function FetchRecord(){
                $.ajax({
                    type: "GET",
                    url: "/Home/ApplyJobs",
                    data: {
                        recNo: numberofRecords
                    },
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (response) {
                        numberofRecords+=1;
                        alert("success...");
                        var cars = response.d;
                        $('#output').empty();
                        $.each(cars, function (index, car) {
                            $('#output').append('<tr><td>' + car.Name + '</td></tr>');
                        });
                    },
                    failure: function (msg) {
                        $('#output').text(msg);
                    }
                });
            }

        );

    </script>

HTML:

 <div id="output">@Model.Name</div>

从上面的代码当我手动输入/Home/ApplyJobs?x=1

它正在工作。但我只想在单击下一步按钮时显示。

我怎样才能得到一份一份的记录?谢谢。

【问题讨论】:

  • 我在您现在删除的上一个问题中评论了代码中的 6 个主要错误,您在这里没有解决任何问题。这很容易解决,但如果不确切了解您要显示的内容,我无法为您提供正确的解决方案。你想返回一个视图,还是你想返回json?当您第一次渲染视图时,您是否最初显示第一个 TblConsultancies 对象?除了TblConsultancies 对象之外,您还显示了其他任何内容吗?
  • 我想显示 TblConsultancies 表中的“姓名”。但这里的条件是,一次只能显示一条记录。如果我单击 Next 按钮,它应该从表中获取下一条记录。
  • 我明白这一点。 TblConsultanciesName 属性是您想要在视图中更新的唯一内容(即显示在 &lt;div id="output"&gt; 中)吗?
  • 当你第一次显示视图时,你会在&lt;div&gt; 中显示任何内容(即第一个TblConsultancies 的名称)还是只是空白?
  • 默认情况下,当我单击 ApplyJobs 选项卡时,它应该显示来自 TblConsultancies 的第一条记录(仅名称)。稍后当我单击下一步按钮时,它应该拉下一条记录。我想在这个 div 中只显示名称。 '
    @Model.Name

标签: jquery sql-server asp.net-mvc


【解决方案1】:

首先是动作方法。您想要返回由其ID 属性排序的TblConsultancies 的下一个Name 属性。因此您需要传入当前的ID 并返回下一个IDName

[HttpGet]
public JsonResult ApplyJobs(int id)
{
  // Get the next TblConsultancy
  var next = _obj.TblConsultancies.OrderBy(j => j.ID).Where(j => j.ID > id).FirstOrDefault();
  if(next == null)
  {
    return null;
  }
  else
  {
    // Select the ID and Name
    var data = new
    {
      ID = next.ID,
      Name = next.Name
    };
    return Json(data, JsonRequestBehavior.AllowGet);
  }
}

查看(不要混合标记和行为 - 使用 Unobtrusive Javascript

<div id="output">@Model.Name</div>
<button id="next" type="button" title="Next">Next</button>

脚本

var ID = '@Model.ID'; // or var ID = 1; if your not initially rendering an object
var url = '@Url.Action("ApplyJobs", "Home")'; // don't hard code url's!
var output = $('#output'); // cache it
$('#next').click(function() {
  $.getJSON(url, { id: ID }, function(data) {
    if(data) {
      ID = data.ID; // reset the current ID
      output.html(data.Name); // display the name
    } else {
      // no more objects - display message, disable the button?
    }
  });
});

【讨论】:

  • 错误“***.TblConsultancies”不包含“Select”的定义,并且找不到接受“JobMessengerUI.TblConsultancies”类型的第一个参数的扩展方法“Select”(您是否缺少using 指令还是程序集引用?)
  • 异常详细信息:System.ArgumentException:参数字典包含方法“System.Web.Mvc.JsonResult ApplyJobs(Int32) 的不可空类型“System.Int32”的参数“id”的空条目)”在“JobMessengerUI.Controllers.HomeController”中。可选参数必须是引用类型、可空类型或声明为可选参数。参数名称:参数
  • 那是因为您没有将 ID 传递给ApplyJobs(int id)。请注意脚本第一行中的注释。如果您最初没有传递和对象并且可以访问其ID,则您需要传递一些东西(或将方法更改为ApplyJobs(int? id),然后如果id为空,则返回集合中的第一个对象。您需要学习调试你的服务器一个客户端代码,这样你就可以看到实际发生了什么。
【解决方案2】:

而不是在对象上注册 Next 按钮的 onclick 事件,而不是 onclick 属性。

<input id="btnNext" type="button" title="Next" value="Next" onclick="FetchRecord()" />

var numberofRecords;
$(document).ready(function () {
    numberofRecords = 1;
}
function FetchRecord(){
    $.ajax({
                type: "GET",
                url: "/Home/ApplyJobs",
                data: {
                    recNo: numberofRecords
                },
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (response) {
                    numberofRecords+=1;
                    alert("success...");
                    var cars = response.d;
                    $('#output').empty();
                    .each(cars, function (index, car) {
                        $('#output').append('<tr><td>' + car.Name + '</td></tr>');
                    });
                },
                failure: function (msg) {
                    $('#output').text(msg);
                }
            });
        });
}

而不是返回 ActionResult 而是尝试返回 JsonResult

public JsonResult ApplyJobs(int recNo)
{
    TblConsultancies consultancyJobs = _obj.TblConsultancies.ToList().Skip(recNo).FirstOrDefault();

    return Json(consultancyJobs);
}

【讨论】:

  • 错误:参数字典包含一个 null 条目,用于“* **.Controllers.HomeController'。可选参数必须是引用类型、可空类型或声明为可选参数。参数名称:参数
  • 在文档加载时变量“numberofRecords”的值设置为 1。怎么可能是空的。是否有任何代码在这里设置为空?如果是这样,只需将方法的签名更改为 public JsonResult ApplyJobs(int?recNo)。但是这次你的 linQ 可能会失败。
  • 您注意到numberofRecords 的作用域不同了吗?
  • 是的,它是全球性的。任何地方都可以访问,直到您在文件中。你是,不是吗?
  • 更新了我的代码。如你所说。但它不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-06-21
  • 1970-01-01
  • 1970-01-01
  • 2019-05-04
  • 2019-04-07
  • 2011-11-29
  • 1970-01-01
相关资源
最近更新 更多