使用asp.net mvc级联下拉列表

时间:2011-02-09 09:01:58

标签: jquery asp.net asp.net-mvc jquery-plugins

我有一个交易类型的下拉列表,在选择时应填充交易者的下拉列表。 我的观点如下:

`<ul>
                <li>
                    <label>
                        <span class="mandatory">*</span>Trader Type:</label>
                    <%=Html.DropDownList("TraderType", (SelectList)ViewData["TraderType"])%>
                    <%--<select id="ddlTraderType" name="TraderType">
                        <%foreach (SelectListItem item in (SelectList)ViewData["TraderType"])
                          { %>
                        <option value="<%=item.Value %>">
                            <%=item.Text %></option>
                        <%} %>
                    </select>--%>
                    <span class="tagline">Select a Trader type from here<strong></strong></span></li>
                <li>
                    <label>
                        <span class="mandatory">*</span>Trader:</label>
                    <select name="Trader" id="Trader">
                    </select>
                    <span class="tagline">Select a Trader from here<strong></strong></span></li>
</ul>`

我尝试使用JQuery,但我无法获得'TraderType'下拉列表的更改事件。 我的剧本是:

$("TraderType").change(function() {
        alert("Change");
        $.ajax({ url: $("#ListTraders").attr("action"),
            type: 'GET',
            contentType: "application/json; charset=utf-8",
            cache: false,
            data: { part: $("#TraderType").val() },
            dataType: 'json',
            async: false,
            success: function(data) {
            if ((data.lstTraders.length) > 0) {
                    for (var count = 0; count < data.lstTraders.length; count++) {
                        $("#Trader").append("<option value='" + data.lstTraders[count].Id.toString() + "'>" +
                            data.lstTraders[count].TraderName + "</option>");
                    }
                }
            }
        });
    });

控制器中的代码是:

public JsonResult ListTraders(string trdrTypeId)
    {

        IList<HSTrader> lstTraders = new List<HSTrader>();
        Build objBld = new Build();
        Document objDoc = new Document();

        string message = string.Empty;
        bool result = true;
        try
        {
            int trdrType = Convert.ToInt32(trdrTypeId);
            lstTraders = objBld.GetTradersByTrdrTypeId(trdrType);
        }
        catch (Exception ex)
        {
            message = ex.Message;
            result = false;
        }
        return Json(new { Success = result, Message = message, lstTraders = lstTraders });}

请帮我解决这个问题。

6 个答案:

答案 0 :(得分:2)

我建议你在这里使用控件;

http://awesome.codeplex.com/

演示:http://demo.aspnetawesome.com/AjaxDropdownDemo

Ajax Dropdown控件可以很容易地用于级联下拉列表。

此外,还有许多其他有用的控件。

答案 1 :(得分:2)

$("#TraderType").change(function() {

});

你错过了# 至于控制器中的操作,请尝试并更改POST中的VERB

  $.ajax({ url: $("#ListTraders").attr("action"),
        type: 'POST',

按照以下方式更改您的控制器:

[HttpPost]
public JsonResult ListTraders(string trdrTypeId)

...当你返回JSON时,你应该改变它:

return Json(new { Success = result, Message = message, lstTraders = lstTraders }, JsonRequestBehavior.DenyGet);

另外,这个参数必须匹配

data: { trdrTypeId: $("#TraderType").val() },

public JsonResult ListTraders(string trdrTypeId)

答案 2 :(得分:1)

jQuery语法不对吗?尝试在元素的ID之前添加哈希:

$("#TraderType").change(function...

答案 3 :(得分:1)

suja,

确保您的交易者点击是在直播活动内(以及在文件准备活动内),即:

<script type="text/javascript">
    $(document).ready(function() {
        $("#TraderType").live('change', function() {...});
    });
</script>

希望这会有所帮助..

答案 4 :(得分:1)

@Suja:这就是我所做的并且有效。 我也删除了这一行=&gt; contentType:“application / json; charset = utf-8”,

<强> HTML

<ul>
    <li>
        <label>
            <span class="mandatory">*</span>Trader Type:</label>
        <%=Html.DropDownList("TraderType", (SelectList)ViewData["TraderType"])%>
        <span class="tagline">Select a Trader type from here<strong></strong></span>
    </li>
    <li>
        <label>
            <span class="mandatory">*</span>Trader:</label>
        <select name="Trader" id="Trader"></select>
        <span class="tagline">Select a Trader from here<strong></strong></span>
   </li>
</ul>

<强>的Javascript

<script type="text/javascript">
$(document).ready(function() {
    $("#TraderType").change(function() {
        $.ajax({
            url: '<%=Url.Action("ListTraders", "Test001")%>',   // MY SAMPLE
            type: 'POST',           
            // contentType: "application/json; charset=utf-8",
            cache: false,
            data: { trdrTypeId: $("#TraderType").val() },
            dataType: 'json',
            async: false,
            success: function(data) {
                if ((data.lstTraders.length) > 0) {
                    for (var count = 0; count < data.lstTraders.length; count++) {
                        $("#Trader").append("<option value='" + data.lstTraders[count].Id.toString() + "'>" +
                            data.lstTraders[count].TraderName + "</option>");
                    }
                }
            }
        });
    });
});
</script>

C#

[HttpPost]
public JsonResult ListTraders(string trdrTypeId)
  {
  return (Json(true, JsonRequestBehavior.DenyGet));
  }

答案 5 :(得分:0)

1

 <%:Html.DropDownList("SubDepartment", (SelectList)ViewData["SelectListSubDepartment"], new { id = "SubDepartment", @class = "combobox" })%>

提供默认列表(如果有)。

2。 创建一个javascript函数

 <script type="text/javascript">
        function onddlChange() {
            $.ajax({
                contentType : 'application/json; charset= utf-8',
                dataType: 'json',
                type : 'POST',
                url : "/ControllerName/IndexChk",
                success : function(data){
                    var markup = '';
                    for (var x = 0; x < data.length; x++) {
                        markup += "<option value='" + data[x].Value + "'>" + data[x].Text + "</option>";
                    }
                    $('#SubDepartment').html(markup).show();
                },
                error: function(ret){
                    alert(ret);
                }

            });
        }
    </script>

3。现在提供Controller操作方法的列表。

public JsonResult IndexChk(string selectedvalue = null)
    {
        List<Sbu> departmentList = new List<Sbu>()
        {
            new Sbu { Id = 1, Name="SubPublishing"},
            new Sbu { Id = 2, Name="SubSoftware"},
            new Sbu { Id = 3, Name="SubEngineering"},
            new Sbu { Id = 4, Name="SubShipping"},
            new Sbu { Id = 5, Name="SubTranscription"}
        };
        var selectList = new SelectList(departmentList, "id", "name", selectedvalue);
        return Json(selectList, JsonRequestBehavior.AllowGet);
    }

就是这样,现在在onclick,onchange等任何事件上调用创建的javascript函数。