MVC:根据下拉列表的选择客户端加载数组

时间:2011-04-18 08:39:22

标签: jquery asp.net-mvc-2 drop-down-menu

我想做以下事情: - 在我的aspx页面上加载一个数组(意味着使用EF来过滤请求的结果),这取决于我的下拉列表的选择(客户端)(包含在我的请求结果中传入参数的id)。

我想我不得不通过jquery或类似的东西。

我已经开始搜索解决方案,就像这样。我不确定我是否找到解决方案的好方法。 我对MVC和客户端脚本非常感兴趣,所以我愿意接受任何其他类型的解决方案或任何好的教程,解释我的问题的结果。

<script type="text/javascript" src="/Scripts/jquery-1.5.2.js"></script>
<script type="text/javascript" src="/Scripts/jquery-ui-1.8.11.custom.js"></script>
<script type="text/javascript">
        $(function() {
           $("#FK_MET_ID").change(function() {
              $.get("/Provider/UpdateListProvider", function(data) {
              // something must be written here ?
              $("#ResultProvider").toggle(); // the div, containing my generated result ? 
                });
            });
        });
</script>

<% using (Html.BeginForm("Action", "Post")){%>    

<div id="ResultProvider"></div>

<%= Html.DropDownList("FK_MET_ID"); %>
<% } %> 

(我使用以下教程开始编码这部分代码:http://www.dotnetcurry.com/ShowArticle.aspx?ID=443

1 个答案:

答案 0 :(得分:0)

你是在正确的方式,你必须添加一些脚本,以使其工作。您需要传入所选值,您应该将控制器代码添加到问题中。也许它更像是一个帖子而不是一个获得,但它超出了这个问题的范围。你返回的数据是什么?我认为您应该使用jquery template来显示您的数据。

$(function() {
           $("#FK_MET_ID").change(function() {
              $.get("/Provider/UpdateListProvider/" + $(this).val(), function(data) {

                if (data) {
                    $("#contractsTemplate").tmpl(data).appendTo('#contracts');
                }

                });
            });
        });

编辑:

最好的方法是与Json合作,在你的控制器中你需要一个像这样的方法:

[HttpPost]
public virtual JsonResult GetContracts(string nameOfTheVariable)
        {
            var contracts = _session.All<Contract>();//add restriction with the variable
            return Json(contracts);
        }

在您看来,您可以使用jquery template

<script id="contractsTemplate" type="test/x-jquery-tmpl">
    <li><a href="/contract/${Id}/version/${Version}/edit">${Filename}</a>&nbsp;&nbsp;&nbsp;<span>${Status}</span></li>
</script>

<script type="text/javascript" src="@Links.Content.javascript.jquery_tmpl_min_js"></script>
<script type="text/javascript">

    $(function () {
        GetContracts();
    });

    function GetContracts() {
        $.ajax({
            type: "POST",
            url: "/API/GetContracts",
            dataType: "json",
            success: function (data) {
                $('#contracts').empty();
                if (data) {
                    $("#contractsTemplate").tmpl(data).appendTo('#contracts');
                }
            }
        });
    }
</script>

您需要在global.ascx中添加一个自定义路由,该路由将指向您所需的操作控制器以及您需要的参数nameOfTheVariable,或者您也可以将其作为查询参数来执行yoururl.com $ action?nameOfTheVariable = “值”

如果您需要更多帮助,请与我联系!