我有一个页面,用户可以选择交易类型是账户间转账还是付款。
我传入的模型有两个列表。 一个是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
}
}
我不想回电话,因为我希望它快点。
答案 0 :(得分:2)
您可以按jquery加载选项代码已更新
这是代码
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"));
答案 2 :(得分:0)
B默认情况下,我不认为&#34;数据源&#34;的概念在html / javascript中意味着什么
尽管如此,您正在寻找的解决方案类似于knockoutjs
您可以将viewmodel绑定到任何html元素,然后您就可以更改DropDownList的数据源
请参阅:http://knockoutjs.com/documentation/selectedOptions-binding.html