【问题标题】:How to populate dropdown in mvc如何在mvc中填充下拉菜单
【发布时间】:2014-04-29 08:13:38
【问题描述】:

我有一个下拉列表,我正在尝试用数据库中的数据填充我的 dorpdown 列表,为此我使用 mvc,所以我如何在控制器中编写方法以及如何为此编写 jquery: 这是我在我看来实现的;

@Html.DropDownListFor("")

这是我可以为 jquery 找到的:

$(document).ready(function() 
{ 
    $('#id_trial').click(function() {

alert("entered in trial button code");

$.ajax({
    type: "GET",
    source: "/ClassName/MethodName",
    dataType: "json",
    success: function (data) {
        $.each(data.aaData,function(i,data)
        {
         alert(data.value+":"+data.text);
         var div_data="<option value="+data.value+">"+data.text+"</option>";
        alert(div_data);
        $(div_data).appendTo('#ch_user1'); 
        });  
        }
  });
});
});

我认为这可能是控制器中的一种方法:

public virtual JsonResult MethodName()
    {
        IList<Fund> funds = _fundManager.Search();
        var list = from x in funds
        select new { Id = x.Code, Name = x.Name };  
        return Json(list);
    }

我不知道如何链接所有这些并使其工作,将不胜感激蚂蚁帮助。

【问题讨论】:

  • 这完全取决于你想要达到的目标。您是否有必要通过 ajax(动态内容)填写下拉列表?如果您的下拉列表中的选项是静态的,那么从视图模型甚至 ViewBag 中提供的选项列表中简单地填充下拉列表可能会更容易。如果您可以提供有关如何使用下拉菜单的更多详细信息,我可以发布一些示例。
  • 上面的代码不行吗??
  • 也许可以在这个问题和答案中找到有用的东西stackoverflow.com/questions/19224550/…
  • 我不能不使用 viewbag 我有一个显示信息的表格,在顶部我想要一个下拉列表。我知道我必须使用 ajax 来做到这一点。我只想从数据库中获取数据并使用 ajax 填充到下拉列表中。如果您需要更多信息,请告诉我
  • 为什么你的控制器方法是虚拟的???

标签: jquery asp.net-mvc asp.net-mvc-4 html.dropdownlistfor


【解决方案1】:

可以参考以下代码片段或以下链接上的详细文章

Dynamically populate the drop-down using jQuery in ASP.Net MVC3

在您的控制器中:

[HttpGet]
public virtual JsonResult LoadInfo()
{
    var query = _repository.GetInformation(); //Here you return the data. 
    return Json(query, JsonRequestBehavior.AllowGet);
}

那么在你看来:

然后你使用 jQuery 加载下拉列表

function LoadInfo() {

    $.getJSON("@Url.Action(MVC.ControllerName.MethodName())", null,
        function (data) {

             $("#info").empty();

            $.each(data, function () {
                 $("#info").append($("<option />").val(this.Id).text(this.Name));
            });

    });
}

【讨论】:

  • 这是做什么的_repository.GetInformation()_repository一个模态名称那么GetInformation()是什么??
  • 这只是一个例子。您需要根据您的要求对其进行修改。重要的是 return Json(model, JsonRequestBehaviour.AllowGet);
  • 我已经使用了那个例子,但是我得到了一个错误,所以我说了这样的话var staff = from saf in db.Staff where saf.StaffName select saf;我在这一行中遇到了一个错误saf.StaffName它说cannot implicity convert type string to bool
  • 本例中where子句有什么用。只需删除 where 子句。
【解决方案2】:

你展示的代码应该可以通过一个简单的改变来工作-

@Html.DropDownList("ch_user1");

【讨论】:

  • 如何将下拉列表 ID 设置为 ch_user1,因为现在我收到一条错误消息,提示 Additional information: There is no ViewData item of type 'IEnumerable&lt;SelectListItem&gt;' that has the key 'subjects'
【解决方案3】:

尝试做这样的事情:

$.ajax({
type: "GET",
source: "/ClassName/MethodName",
dataType: "json",
success: function (data) {
   var div_data="";
    $(data).each(function(){
     div_data +="<option value="+$(this).value+">"+$(this).text+"</option>";
    });
    $('#ch_user1').html(div_data);
   }
 }); 

【讨论】:

    【解决方案4】:

    试试下面。请参阅 Darin Dimitrov 提供的this example

    @model App.Models.staff
    
    @Html.DropDownListFor(
        x => x.staffName, 
        Enumerable.Empty<SelectListItem>(), 
        "-- Loading Values --",
        new { id = "foo" }) 
    
     $(function () {
            $.getJSON('/ClassName/MethodName', function (result) {
                var ddl = $('#foo');
                ddl.empty();
                $(result).each(function () {
                    $(document.createElement('option'))
                        .attr('value', this.stafdid)
                        .text(this.staffName)
                        .appendTo(ddl);
                });
            });
        });
    

    【讨论】:

    • 我在创建我复制的下拉列表时卡住了,过去同样的事情我在@Html.DropeDownListFor 下得到一个错误我得到读取行??
    • 这行 x => x.Id 可能有错误。这应该是模型属性来获取选定的值。
    • 我的模态名称是员工,列名称是 stafdid 和员工姓名——我正在尝试填充员工姓名,那看起来如何?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-06
    • 2014-01-04
    相关资源
    最近更新 更多