![](/img/trans.png)
[英]Passing HTML dropdown-menu values to HTML input through Javascript
[英]Passing values to html dropdown
如何將值從查詢控制器傳遞到html視圖下拉列表。 我只想使用查詢從下拉列表中查看值,而從查詢中獲得ID列,並且該ID將在下拉列表中隱藏,並且名稱僅可見,因為我的目標可能需要唯一的ID進行更新。
目前,這里是我的偽代碼來讀取我的控制器:
<html>
<select id="names" onclick="getNames()" style="width:200px; height:35px; margin-left:700px">
<option value="" disabled selected>Names</option>
</select>
</html>
<script>
function getNames() {
//alert("here");
$.ajax({
url: '/Home/showData',
type: 'GET',
dataType: 'json',
success: function (data) {
var row = '';
$.each(data, function (i, item) {
row += '<option style="display:none;" value=' + item.id + '> ' + item.id + '</option>';
+ '<option value=' + item.name + '> ' + item.name + '</option>';
});
$('#names').html(row); // override previous results
},
error: function (jqXhr, textStatus, errorThrown) {
console.log(errorThrown.toString());
}
});
}
</script>
我已經建立了查詢到返回json的控制器的查詢:
public ActionResult showData()
{
//Load mgr list table from MySql
List<Details> listItems = new List<Details>();
string constr = ConfigurationManager.ConnectionStrings["ConString"].ConnectionString;
using (MySqlConnection con = new MySqlConnection(constr))
{
string query = "SELECT id, concat(f_name,', ',l_name) as names FROM tblInfo";
using (MySqlCommand cmd = new MySqlCommand(query))
{
cmd.Connection = con;
con.Open();
using (MySqlDataReader sdr = cmd.ExecuteReader())
{
while (sdr.Read())
{
try
{
listItems.Add(new empDetails
{
id = Convert.ToInt32(sdr["id"]),
name = sdr["names"].ToString(),
});
}
catch (Exception e)
{
Console.WriteLine("An error occurred: '{0}'", e);
}
}
}
con.Close();
}
}
return Json(listItems, JsonRequestBehavior.AllowGet);
}
您在AJAX調用中遇到了幾個問題:
1) <select>
選擇器使用類名而不是元素名(在原始版本時)。 使用$('#names')
代替。
2)您要分別為id
和name
創建選項列表。 您可以將value
屬性設置為id
並將文本設置為name
。
因此,用於填充<select>
元素的AJAX回調應如下所示:
$.ajax({
url: '/Home/showData',
type: 'GET',
dataType: 'json',
success: function (data) {
var ddl = $('#names');
ddl.empty(); // clear existing values
$.each(data, function (i, item) {
ddl.append($('<option>', {
value: item.id,
text: item.name
}, '</option>'))
});
},
error: function (jqXhr, textStatus, errorThrown) {
console.log(errorThrown.toString());
}
});
但是,如果應該從頁面加載中填充下拉列表(即在從控制器端調用return View()
之后),則應使用List<SelectListItem>
作為選項列表,並使用DropDownListFor
創建<select>
元素,並將選項列表傳遞給任一ViewBag
或List<SelectListItem>
viewmodel屬性:
控制器動作
ViewBag.ListItems = listItems.Select(x => new SelectListItem { Text = x.name, Value = x.id }).ToList();
視圖
@Html.DropDownListFor(model => model.names, ViewBag.ListItems as IEnumerable<SelectListItem>, new { style="width:200px; height:35px; margin-left:700px" })
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.