json结果为强类型List

时间:2011-07-21 14:49:34

标签: jquery asp.net-mvc ajax json asp.net-mvc-3

在强类型视图中,我有一个下拉列表,其中包含来自我的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上找不到任何好的解释。这可能吗?还有另一种解决这个问题的优雅方法吗?

1 个答案:

答案 0 :(得分:1)

好的,现在很清楚了。

您可以在JavaScript中构建类似的对象,并将其作为模型look here for an example how to发送。