将JSON对象传递给MVC控制器

时间:2012-07-26 18:42:23

标签: json

我可以成功地对我的C#Controller进行jQuery Ajax调用并收回一个XML字符串,但我需要收集一些投资组合日期并将它们打包成一个JSON对象,这样我就可以将它们发送回另一个C#Controller 。 如果这是一个C#问题,那么如果我在错误的论坛中,我会道歉...但是我想把我的JSON对象传递到服务器端控制器..

这是我正在尝试做的事情:

        var nodeDatesJson = {"nodedates":        // CREATE JSON OBJECT OF DATE STRINGS
                            { "date": 01/20/2012,
                              "date": "01/21/2012" } };
        getTradeContribs(thisPfId, nodeDatesJson.nodedates.date);     

现在调用下一个js函数:

 function getTradeContribs(pfid, nodedates) {
        //alert(nodedates);
        $.ajax({                                // GET TRADE CONTRIBS FROM SERVER !!
            url: "/Portfolios/getTradeContribs?portfolioId=" + pfid + "&nodedates=" + nodedates,
            type: "GET",    // or "PUT"
            dataType: "json",               
            async: true,
            success: parseTradeContribs,
            error: function (error) {
                alert("failed in opening Trade Contribs file !!!");
            }
        });
    }
    function parseTradeContribs(data) {
        alert("In parseTradeContribs..." );
        $(data).find("Trade").each(function(){
            $(".TradeContrib").append($(this).text());
        })
    }

我的C#控制器正在尝试读取“nodedates”JSON对象,但是 HOW 我是否已将其读入?

   public string getTradeContribs(string portfolioId, **string nodedates**)
        {

            // Build Portfolio Select request here !
            RequestBuilder rzrRequest = new RequestBuilder();

            // REQUEST FOR CONTRIBUTIONS !
            // ... more code here..
            xmlResponse.LoadXml(contribResponse);

            string jsonTest = @" {""nodedates"": ""date"":""01/01/2012""}";

            //return xmlResponse.OuterXml;  // WORKS FINE
            return "<Trade><TradeId>1234</TradeId></Trade>";    // RETURN TEST XML STR

        }

提前谢谢你...... 鲍勃

2 个答案:

答案 0 :(得分:1)

在MVC操作中接收日期列表的最佳方法是绑定到集合。这意味着您应该将日期和其他属性放在具有以下命名约定的表单中:

<input type="hidden" name="dates" value="2012-1-20" />  
<input type="hidden" name="dates" value="2012-1-21" />  

然后你应该序列化这个表单(查看jquery的文档)并将其数据发布到你的行动中,这将是:

public ActionResult getTradeContribs(string portfolioId, IList<DateTime> dates) {
  // Do your work here
}  

您应该真正了解MVC模型绑定和集合绑定:
Model binding to a list
Model binding objects


另外,如果可以的话,你的javascript对象有两个同名的属性,这可能不是你的意思。如果要将多个日期存储在对象中的某个位置,则应使用数组:

    var nodeDatesJson = {"nodedates":  
                        [ "01/20/2012", "01/21/2012" ] };  

答案 1 :(得分:0)

很抱歉,但我不太了解你的疑问......但是这里有:

也许你应该将格式良好的json作为字符串传递并使用一些C#解析器。

这样,您可以在服务器端获取与javascript中的Json对象相同的对象。

=]