使用Javascript更改DropDownList数据

时间:2014-06-19 10:23:58

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

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

我传入的模型有两个列表。 一个是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',我需要:

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

如果他们选择"付款",那么我需要将DrowdownB更改为ThirdParty列表。

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

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

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

3 个答案:

答案 0 :(得分:2)

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

您将在http://json.codeplex.com/

获得有关Newton Json的所有信息

C#CODE

//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 CODE

<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) )
    });
}

新Javascript代码fpor Json

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/

请参阅新的Jsfiddle for Json http://jsfiddle.net/pratbhoir/TF9m5/3/

答案 1 :(得分:0)

当然你可以这样

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

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

或者

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

Link for reference

答案 2 :(得分:0)

B默认情况下,我不认为&#34;数据源&#34;的概念在html / javascript中意味着什么

尽管如此,您正在寻找的解决方案类似于knockoutjs

您可以将viewmodel绑定到任何html元素,然后您就可以更改DropDownList的数据源

请参阅:http://knockoutjs.com/documentation/selectedOptions-binding.html