我正在尝试使用Ajax和下拉列表查找,用户在文本框中输入邮政编码,然后单击搜索。 从这里我想填充一个下拉列表,其值来自数据库, 该操作位于单独的控制器中: -
public ActionResult Search(string Pcode)
{
return Json(new[] {
new { value = '1', text = "text 1" },
new { value = '2', text = "text 2" },
new { value = '3', text = "text 3" }
});
}
我的HTML:
Pcode:- @Html.TextBox("GPPOST")
GP Practice:
@Html.EditorFor(model => model.Patient.GPSurgery)
<br/>
@Html.DropDownListFor(m =>m.Patient.GPSurgery Enumerable.Empty<SelectListItem>(),"-- Select GP --")
GP : <input type="button" id="SearchPcode" value="Search">
最后是Ajax:
$(function () {
$('#SearchPcode').click(function () {
// get the new value
var value = $(this).val();
// and send it as AJAX request to the action
$.ajax({
url: '/GP_Practices/Search', //'<%= Url.Action("Search", "GP_Practices") %>',
type: 'POST',
data: { pcode: value },
success: function (result) {
// when the AJAX succeeds refresh the dropdown list with
// The JSON values returned from the controller action
var GPNames = $('#Patient.GPSurgery');
GPNames.empty();
$.each(result, function(index, item) {
alert(item.text);
});
$.each(result, function (index, item) {
GPNames.append(
$('<option/>', {
value: item.value,
text: item.text
}));
});
}
});
});
});
当我运行代码时,我确实得到了Json结果(我可以在警告框中看到)。
我的两个问题是:
1)我似乎无法从文本框Html.TextBox(“GPPOST”)
2)下拉列表没有使用新值刷新。
答案 0 :(得分:1)
1)我似乎无法传递文本框中的值Html.TextBox(“GPPOST”)
这是因为您的Javascript通过pcode
,但您的控制器需要Pcode
(套管重要)。
同样正如Ehsan Sajjad所提到的那样,你并没有发送文本框的价值,但是这解决了一个更大的问题:你将两个字段绑定到同一个模型属性强>,你做不到。您必须为下拉列表和搜索输入使用单独的字段。
2)下拉列表没有使用新值刷新。
那是因为你的jQuery选择器不正确:
var GPNames = $('#Patient_GPSurgery');