我正在尝试从单独的文本框中的值填充文本框,即。使用客户帐号自动填充客户名称。我的AJAX正在返回正确的结果,但它没有填充到其他文本框中,这就是为什么我怀疑我的jQuery是错误的。
<div class="form-group">
@Html.LabelFor(model => model.AccountNumber, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(model => model.AccountNumber, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.AccountNumber, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CustomerName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.TextBoxFor(model => model.CustomerName, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.CustomerName, "", new { @class = "text-danger" })
</div>
</div>
[HttpGet]
public ActionResult GetCustomerName(string RecKey)
{
var result = (from c in db.Customers
where c.RecKey.Equals(RecKey)
select new { c.RecName });
return Json(result, JsonRequestBehavior.AllowGet);
}
返回JSON(仅返回一个完全匹配的结果):
[{"RecName":"This is a customer name"}]
$(document).ready(function () {
var RecKey;
$(function () {
$("#AccountNumber").keydown(function () {
RecKey = $("#AccountNumber").val();
$.ajax({
type: "GET",
url: 'GetCustomerName',
data: { RecKey: RecKey },
success: function (data) {
if (data) {
//alert(data);
$('#CustomerName').val(data.RecName);
}
}
});
});
});
});
我对jQuery很陌生,并且在同一个文本框上已经成功使用自动完成功能,但我的搜索并没有找到很多填充其他文本框的内容。有人有什么想法吗?
答案 0 :(得分:1)
问题是因为生成的JSON是一个对象数组。如果您可以保证它只返回该数组中的单个对象,那么您可以对该数组的索引访问器进行硬编码:
success: function (data) {
if (data) {
$('#CustomerName').val(data[0].RecName);
}
}
或者,您可以修改C#代码以返回单个实体而不是数组:
return Json(result.SingleOrDefault(), JsonRequestBehavior.AllowGet); // or FirstOrDefault()
答案 1 :(得分:0)
我认为TextBox助手只添加了name属性,而你的JQuery代码正在按ID查找框.... 尝试改变;
@Html.TextBoxFor(model => model.CustomerName, new { @class = "form-control" })
到
@Html.TextBoxFor(model => model.CustomerName, new { @class = "form-control", id = "CustomerName" })
您还需要使用其他答案中建议的SingleOrDefault服务器端或[0]索引器客户端 - 因为即使数组只有一个项目,它仍然是一个数组(不是对象),所以也需要修复。
P.S。调试这样的东西的一个有用的工具是按F12来启动开发人员控制台 - 然后你可以尝试输入你的jquery代码,看看它是否可以直接进入控制台。例如,如果您键入$(&#34; #CustomName&#34;),您实际上是否返回了一个对象?如果没有 - 那么我的回答就是原因。如果是这样 - 其他东西正在影响这一点。