使用Jquery和Ajax返回数据

时间:2017-02-07 21:52:37

标签: c# jquery ajax

我正在网页上编写一个函数,当你输入一个序列号时,它会在SQL数据库中查找部件的哪个型号与该序列号一起使用。现在,JsonResult正在工作并找到正确的信息,但是jquery和ajax有问题,因为它在你点击序列号框后没有显示(设置了一个模糊,它也会触发)。

这是控制器代码。

    public JsonResult SerialNumberSearch(string serialnum)
    {
        var result = db.IASerialNoMasters.Where(x => x.SerialNo == serialnum).Select(x => x.Model).Single().ToString();

        return Json(result, JsonRequestBehavior.AllowGet);
    }

以下是我目前在View上的脚本。

<script type="text/javascript">
    var serialnum;
    var url = '@Url.Action("SerialNumberSearch", "WarrantyRegistration")'
    $("#SerialNum").blur(function () {
        GetLiftModel();
    });
    function GetLiftModel() {
        serialnum = $("#SerialNum").val();
        $.ajax({
            type: "GET",
            url: url,
            data: { serialnum: serialnum },
            success: function(data) {
                $('#ModelName').val(data.Model);
            }
        })
    }
</script>

这是View上文本框的代码。

        <div class="row">
            @Html.TextBoxFor(model => model.SerialNum, new { placeholder = "Serial #" })
            @Html.ValidationMessageFor(model => model.SerialNum, null, new { @class = "text-danger" })
        </div>

        <br />

        <div class="column-1">
            @Html.TextBoxFor(model => model.ModelName, new { placeholder = "Model" })
            @Html.ValidationMessageFor(model => model.ModelName, null, new { @class = "text-danger" })
        </div>

任何人都可以从代码的函数GetLiftModel区域告诉我缺少什么吗?

2 个答案:

答案 0 :(得分:1)

这最终取决于您要访问的内容以及是否需要访问多个属性:

  • 需要一个属性吗?如果您只需要一个属性,那么您应该能够将该属性与当前代码隔离开来,并且只能将其传回去。
  • 需要多个属性?然后您可能需要从SerialNumberSearch()方法返回整个对象或至少部分属性。

退回单一财产

您当前的代码有一个最终的ToString()调用,似乎表明您只返回一个属性,在本例中为Model属性:

var result = db.IASerialNoMasters
               .Where(x => x.SerialNo == serialnum)
               .Select(x => x.Model)
               .Single()
               .ToString(); // This returns a string

由于这种情况,您返回的data对象已经包含该特定属性,因此您只需使用data,如下所示:

success: function(data) {
    // data will already contain your result, so just use it
    $('#ModelName').val(data);
}

返回多个属性或对象图

如果您希望能够在JSON中访问对象中的多个属性,那么您将希望实际返回对象本身并让序列化程序处理将其传递给Javascript,以便可以按预期使用它:

public JsonResult SerialNumberSearch(string serialnum)
{
    var result = db.IASerialNoMasters
                   .SingleOrDefault(x => x.SerialNo == serialnum);;
    if(result == null)
    {
         // Do something if it doesn't exist
         return HttpNotFound();
    }
    return Json(result, JsonRequestBehavior.AllowGet);
}

然后只需在Javascript代码中的data对象中访问所需的属性:

success: function(data) {
   // data will already contain your result, so just use it
   $('#ModelName').val(data.Model);
}            

答案 1 :(得分:1)

您确定要展示data.Model吗?如果您返回JsonResult,那么data变量实际上是您序列号的代表,因此data.Model实际上可能是undefined $.ajax({ type: "GET", url: url, data: { serialnum: serialnum }, success: function(data) { $('#ModelName').val(data); } }) 。 尝试将其更改为

string

另一方面,基于您只返回JsonResult的事实,没有理由返回public JsonResult SerialNumberSearch(string serialnum) { var result = db.IASerialNoMasters .Where(x => x.SerialNo == serialnum) .Select(x => x.Model).Single().ToString(); return result; } 。您可以将控制器方法的签名更改为

npm run bundle