Asp.Net MVC 5 Fill EditorFor When Dropdown SelectedItem Changed
Asp.Net MVC 5 Fill EditorFor When Dropdown SelectedItem Changed
当我从 Dropdown 中 select 一个产品时,我需要填充 Html.EditorFor 控件。我是 JQuery 和 Ajax 的新手。
我的下拉菜单:
@Html.DropDownList("ProductId", null, htmlAttributes: new { @class = "form-control",
@onchange= "FillPrice()", id= "ProductId" })
编辑者:
@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?
}
});
}
Controller/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 获取和结果,但我无法将该值绑定到 EditorFor。
您 JavaScript 中的响应在 price
变量中:
function (price) {
//...
}
根据服务器端代码,该对象似乎具有三个值:
new {
id = r.Id,
label = r.ProductPrice,
value = r.ProductPrice }
(我不确定为什么你需要两次相同的值,但无论如何。)
所以您可能正在寻找该变量的 value
属性?:
$('#txtPrice').val(price.value);
您还可以检查浏览器的调试器并查看 price
变量的结构来确定。
编辑: 看起来 return 值可能是一个数组。考虑到服务器端代码生成 IEnumerable<>
,这是有道理的。如果它 应该 只是 return 单个值,您可以将其明确化。像这样:
return Json(price.Single(), JsonRequestBehavior.AllowGet);
您需要围绕它添加一些错误检查,处理错误的逻辑(多个找到的值或没有找到的值)由您决定。
相反,如果您希望它是一个数组,您可以将其作为数组客户端访问:
$('#txtPrice').val(price[0].value);
同样,您需要添加一些错误检查(这次是在客户端代码中)以确保在尝试使用值之前存在该值。
当我从 Dropdown 中 select 一个产品时,我需要填充 Html.EditorFor 控件。我是 JQuery 和 Ajax 的新手。
我的下拉菜单:
@Html.DropDownList("ProductId", null, htmlAttributes: new { @class = "form-control",
@onchange= "FillPrice()", id= "ProductId" })
编辑者:
@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?
}
});
}
Controller/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 获取和结果,但我无法将该值绑定到 EditorFor。
您 JavaScript 中的响应在 price
变量中:
function (price) {
//...
}
根据服务器端代码,该对象似乎具有三个值:
new {
id = r.Id,
label = r.ProductPrice,
value = r.ProductPrice }
(我不确定为什么你需要两次相同的值,但无论如何。)
所以您可能正在寻找该变量的 value
属性?:
$('#txtPrice').val(price.value);
您还可以检查浏览器的调试器并查看 price
变量的结构来确定。
编辑: 看起来 return 值可能是一个数组。考虑到服务器端代码生成 IEnumerable<>
,这是有道理的。如果它 应该 只是 return 单个值,您可以将其明确化。像这样:
return Json(price.Single(), JsonRequestBehavior.AllowGet);
您需要围绕它添加一些错误检查,处理错误的逻辑(多个找到的值或没有找到的值)由您决定。
相反,如果您希望它是一个数组,您可以将其作为数组客户端访问:
$('#txtPrice').val(price[0].value);
同样,您需要添加一些错误检查(这次是在客户端代码中)以确保在尝试使用值之前存在该值。