Ajax MVC更新下拉列表

时间:2015-06-22 14:24:30

标签: c# jquery asp.net-mvc razor

我正在尝试使用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)下拉列表没有使用新值刷新。

1 个答案:

答案 0 :(得分:1)

  

1)我似乎无法传递文本框中的值Html.TextBox(“GPPOST”)

这是因为您的Javascript通过pcode,但您的控制器需要Pcode套管重要)。

同样正如Ehsan Sajjad所提到的那样,你并没有发送文本框的价值,但是这解决了一个更大的问题:你将两个字段绑定到同一个模型属性,你做不到。您必须为下拉列表和搜索输入使用单独的字段。

  

2)下拉列表没有使用新值刷新。

那是因为你的jQuery选择器不正确:

var GPNames = $('#Patient_GPSurgery');