【问题标题】:Change DropDownList data with Javascript使用 Javascript 更改 DropDownList 数据
【发布时间】:2014-08-09 20:31:42
【问题描述】:

我有一个页面,用户可以在其中选择交易类型是账户间转账还是付款。

我传入的模型有两个列表。 一个是 SelectListItem 的列表 一个是SelectListItem的列表

其中一个列表填充如下:

var entities = new EntityService().GetEntityListByPortfolio();
foreach (var entity in entities.Where(x=>x.EntityTypeId == (int)Constants.EntityTypes.BankAccount))
{
    model.BankAccounts.Add(new SelectListItem
    {
        Value = entity.Id.ToString(CultureInfo.InvariantCulture),
        Text = entity.Description
    });
}

如果用户选择'Inter account transfer',我需要:

使用来自 Accounts 的列表填充 DropdownA,并使用相同的 Accounts 列表填充 DropdownB

如果他们选择“付款”,那么我需要将 DrowdownB 更改为第三方列表。

有没有办法使用 javascript 来更改列表来源,客户端?

function changeDisplay() {
    var id = $('.cmbType').val();
    if (id == 1) // Payment
    {
        $('.lstSource'). ---- data from Model.ThirdParties
    } else {
        $('.lstSource'). ---- data from Model.Accounts
    }
}

我不想回电,因为我希望它很快。

【问题讨论】:

    标签: javascript asp.net-mvc twitter-bootstrap


    【解决方案1】:

    您可以通过 jquery 加载选项
    代码已更新
    这是代码

    您将在http://json.codeplex.com/获得有关 Newton Json 的所有信息

    C# 代码

    //You need to import Newtonsoft.Json  
    string jsonA = JsonConvert.SerializeObject(ThirdParties);
    //Pass this jsonstring to the view by viewbag to the
    Viewbag.jsonStringA = jsonA;
    
    string jsonB = JsonConvert.SerializeObject(Accounts);
    //Pass this jsonstring to the view by viewbag to the
    Viewbag.jsonStringB = jsonB;
    

    你会得到一个这样的jsonstring

    [{"value":"1","text":"option 1"},{"value":"2","text":"option 2"},{"value":"3","text":"option 3"}]
    

    HTML 代码

    <button onclick="loadListA();">Load A</button>
    <button onclick="loadListB();">Load B</button>
    
    <select name="" id="items">
    
    </select>
    

    JavaScript 代码

    function option(value,text){
         this.val= value;
        this.text = text;
    }
    
    var listA=[];
    var listB=[];
    
    //you just have to fill the listA and listB by razor Code
        //@foreach (var item in Model.ThirdParties)
        //{
        //    <text>
        //    listA.push(new option('@item.Value', '@item.Text'));
        //    </text>
       // }
        //@foreach (var item in Model.Accounts)
       // {
        //    <text>
       //     listA.push(new option('@item.Value', '@item.Text');
       //     </text>
       // }
    
    listA.push(new option(1,"a"));
    listA.push(new option(2,"b"));
    listA.push(new option(3,"c"));
    
    listB.push(new option(4,"x"));
    listB.push(new option(5,"y"));
    listB.push(new option(6,"z"));
    
    function loadListA(){
        $("#items").empty();
        listA.forEach(function(obj) {
            $('#items').append( $('<option></option>').val(obj.val).html(obj.text) )
        });
    }
    
    function loadListB(){
        $("#items").empty();
        listB.forEach(function(obj) {
            $('#items').append( $('<option></option>').val(obj.val).html(obj.text) )
        });
    }
    

    Json 的新 Javascript 代码

    var listA=[];
    var listB=[];
    var jsonStringA ='[{"val":"1","text":"option 1"},{"val":"2","text":"option 2"},{"value":"3","text":"option 3"}]';
    var jsonStringB ='[{"val":"4","text":"option 4"},{"val":"5","text":"option 5"},{"value":"6","text":"option 6"}]';
    
    //you just have to fill the listA and listB by razor Code 
    //var jsonStringA = '@Viewbag.jsonStringA';
    //var jsonStringB = '@Viewbag.jsonStringB';
    
    listA =  JSON.parse(jsonStringA);
    listB =  JSON.parse(jsonStringB);
    
    function loadListA(){
        $("#items").empty();
        listA.forEach(function(obj) {
            $('#items').append( $('<option></option>').val(obj.val).html(obj.text) )
        });
    }
    
    function loadListB(){
        $("#items").empty();
        listB.forEach(function(obj) {
            $('#items').append( $('<option></option>').val(obj.val).html(obj.text) )
        });
    }
    

    这是小提琴http://jsfiddle.net/pratbhoir/TF9m5/1/

    查看 Json 的新 Jsfiddle http://jsfiddle.net/pratbhoir/TF9m5/3/

    【讨论】:

    • 这看起来很有希望。我已经通过问题进行了更改,但展示了我如何为模型构建列表。而不是我在做什么,我必须为你的'ListA'构建一个字符串?那么,逗号分隔的列表?每个项目都有一个 ID,那么 listA 会是什么样子呢?
    • 谢谢!这 100% 有效。有一件事......而不是使用“listA.push(new option(1,”a“));”,没有办法填充数组字符串,如“[[“选项描述”,“1 "],["Option 2 Description", "2"]......]?我正在尝试,但它没有填充。这是为了尝试保存传递到页面的数据。
    • 总有办法.. 所以,你的意思是你要传递这个字符串 "[["Option Description", "1"],["Option 2 Description", "2"] ......] 它应该被填充。如果它是这样的,为什么不使用 Json 字符串,你不必做太多..
    • 谢谢普拉蒂克。您是在谈论调用数据库以填充列表吗?如果是这样,则需要立即进行更新,因此需要在页面加载时加载数组,而无需进一步调用数据库。或者,是否有一个可以填充的 json 字符串,无需调用即可使用?
    • 代码已更新。我给了你和想法。弄清楚它是如何为你工作的。如果它对你有用,请将答案标记为正确。将不胜感激。 :)
    【解决方案2】:

    当然可以

    试试

    var newOption = "<option value='"+"1"+'>Some Text</option>"; $(".lstSource").append(newOption);

    $(".lstSource").append($("&lt;option value='123'&gt;Some Text&lt;/option&gt;");

    或者

    $('.lstSource'). append($("<option></option>"). attr("value", "123"). text("Some Text"));

    Link for reference

    【讨论】:

      【解决方案3】:

      B 默认,我不认为“数据源”的概念在 html/javascript 中意味着什么

      不过,您正在寻找的解决方案类似于 knockoutjs

      您将能够将视图模型绑定到任何 html 元素,然后您将能够更改 DropDownList 的数据源

      见:http://knockoutjs.com/documentation/selectedOptions-binding.html

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-08-23
        • 2021-11-11
        • 1970-01-01
        • 2023-04-10
        • 1970-01-01
        • 1970-01-01
        • 2014-03-29
        • 1970-01-01
        相关资源
        最近更新 更多