我正在网页上编写一个函数,当你输入一个序列号时,它会在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区域告诉我缺少什么吗?
答案 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