当我从Dropdown中选择产品时,我需要填充Html.EditorFor控件。我是JQuery和Ajax的新手。
我的下拉列表:
@Html.DropDownList("ProductId", null, htmlAttributes: new { @class = "form-control",
@onchange= "FillPrice()", id= "ProductId" })
EditorFor:
@Html.EditorFor(model => model.ProductPrice,
new { htmlAttributes = new {
@class = "form-control",
id="txtPrice" } })
使用Javascript:
function FillPrice() {
var ProductId = $('#ProductId').val();
$.ajax({
url: '@Url.Action("GetPrice")',
dataType: "JSON",
data: { ProductId: ProductId },
contentType: "application/json; charset=utf-8",
success: function (price) {
$('#txtPrice').val() ??? What to write here to fill txtPrice?
}
});
}
控制器/用getPrice:
public JsonResult GetPrice(int ProductId)
{
var price = from r in db.Products
where r.Id == ProductId
select new {
id = r.Id,
label = r.ProductPrice,
value = r.ProductPrice };
return Json(price, JsonRequestBehavior.AllowGet);
}
到目前为止,一切正常。我查看Firebug并查看Json get和结果,但我无法将值绑定到EditorFor。
答案 0 :(得分:1)
JavaScript中的响应位于price
变量:
function (price) {
//...
}
基于服务器端代码,看起来该对象有三个值:
new {
id = r.Id,
label = r.ProductPrice,
value = r.ProductPrice }
(我不确定为什么你需要两次相同的值,但无论如何。)
所以你可能正在寻找那个变量的value
属性?:
$('#txtPrice').val(price.value);
您还可以检查浏览器的调试器,并查看price
变量的结构以确保。
编辑:看起来返回值可能是一个数组。鉴于服务器端代码导致IEnumerable<>
,这是有道理的。如果它 只返回一个值,那么你可以明确表示。像这样:
return Json(price.Single(), JsonRequestBehavior.AllowGet);
您希望在其周围添加一些错误检查,并且处理错误的逻辑(找到多个值或找不到值)取决于您。
相反,如果您希望它是一个数组,您可以将其作为数组客户端访问:
$('#txtPrice').val(price[0].value);
同样,您想要添加一些错误检查(这次是在客户端代码中),以确保在尝试使用它之前存在一个值。