在强类型视图中,我有一个下拉列表,其中包含来自我的viewmodel的List中的“instruments”。每次用户点击某个项目时,musiciansinstrument都应显示在下拉列表下方。
这是我的viewmodel
public class RegisterMusicianModel
{
public RegisterMusicianModel()
{
instrumentRepository = new InstrumentRepository();
instrumentlist = instrumentRepository.FindAllInstruments().ToList<instrument>();
musicianinstrumentlist = new List<musiciansinstrument>();
}
private InstrumentRepository instrumentRepository;
private List<instrument> instrumentlist;
private List<musiciansinstrument> musicianinstrumentlist;
public List<musiciansinstrument> Musicianinstrumentlist
{
get { return musicianinstrumentlist; }
set { musicianinstrumentlist = value; }
}
public List<instrument> Instrumentlist
{
get { return instrumentlist; }
set { instrumentlist = value; }
}
private musician music = new musician();
public musician Music
{
get { return music; }
set { music = value; }
}
}
正如你所看到的,我有一个完整的乐器列表,一个空的音乐家乐器列表和一个音乐家的对象。 因此,每次用户更改下拉列表中的选择时,此方法都会被调用并返回一个JSON对象(musiciansinstrument,而非仪器)。
[HttpPost]
public JsonResult AjaxInstrumentsMusician(int id)
{
musiciansinstrument mi = new musiciansinstrument();
mi.idInstruments = id;
mi.Instrumentname = instrumentrepo.GetInstrument(id).name;
return Json(mi);
}
脚本:
$(document).ready(function () {
$('#Instrumentlist').change(function (e) {
var myval = $('#Instrumentlist').val();
alert(myval);
$.ajax({
url: "/Account/AjaxInstrumentsMusician",
type: "POST",
data: { id: myval },
success: function (result) {
alert(result.Instrumentname);
},
error: function () {
alert('failed');
}
});
});
});
我可以在我想要的任何地方显示JSON对象属性,这没关系。但我真正想要的是将它添加到强类型对象(viewmodel中的空List)。所以我可以从我的HTTPPOST方法中的viewmodel参数访问它。我不是FormCollection的忠实粉丝,额外的参数,ViewBags,......
我对JSON这个概念不熟悉,我在google上找不到任何好的解释。这可能吗?还有另一种解决这个问题的优雅方法吗?