jquery - Asp.Net MVC 5 Fill EditorFor When Dropdown SelectedItem Changed -
i need fill html.editorfor controls when select product dropdown. newbie @ jquery , ajax.
my dropdown:
@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() ??? write here fill txtprice? } }); }
controller/getprice:
public jsonresult getprice(int productid) { var price = r in db.products r.id == productid select new { id = r.id, label = r.productprice, value = r.productprice }; return json(price, jsonrequestbehavior.allowget); }
up point, works. check firebug , see json , results can't bind value editorfor.
the response in javascript in price
variable:
function (price) { //... }
based on server-side code, looks object has 3 values:
new { id = r.id, label = r.productprice, value = r.productprice }
(i'm not sure why need same value twice, whatever.)
so you're looking value
property of variable?:
$('#txtprice').val(price.value);
you can check browser's debugger , see structure of price
variable make sure.
edit: looks return value may array. makes sense given server-side code resulting in ienumerable<>
. if should returning single value, might make explicit. this:
return json(price.single(), jsonrequestbehavior.allowget);
you'll want add error checking around that, , logic handling errors (multiple found values or no found value) you.
conversely, if want array, access array client-side:
$('#txtprice').val(price[0].value);
again, you'd want add error checking (in client-side code time) make sure value exists before trying use it.
Comments
Post a Comment