2012-10-03 122 views
1

我是新来的asp.net mvc。我在Action方法中获取参数的值时遇到了一些麻烦。将post参数传递给asp.net mvc中的动作方法?

我有以下代码:

[HttpPost] 
public ActionResult ToggleRecommend(string mode) 
{ 
    byte[] requestContent = new byte[Request.ContentLength]; 
    Request.InputStream.Read(requestContent, 0, Request.ContentLength); 
    string content = Encoding.ASCII.GetString(requestContent); 

    return EmptyResult(); 
} 

我访问使用Ajax请求此方法。要求有这些标题:

Accept application/json 
Accept-Encoding gzip, deflate 
Accept-Language en-gb,en;q=0.5 
Connection keep-alive 
Content-Length 8 
Content-Type text/plain; charset=UTF-8 
Host localhost:62718 
Referer http://localhost:62718/microsite 
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20100101 Firefox/15.0.1 
X-Request JSON 
X-Requested-With XMLHttpRequest 

这身:

mode=off 

我的问题是,ToggleRecommendmode参数没有被填充了请求中的值 - 相反,它是空的。

该请求被正确地到达我的服务器:该方法中的可变content具有值mode=offRequest.ContentLength是8按预期方式。按照预期,Request.RequestType也是“POST”。但是,Request.Form为空:它没有键或值。 (我不知道这是否相关)。

这里怎么回事?如何获得我的mode参数的值以进入我的操作方法?

问题必须与岗位做:如果我删除HttpPost属性和一个请求的URL localhost:62718/microsite/toggleRecommend/?mode=offmode参数得到值off如预期。

编辑:

该请求正在使用所述Mootools的库中的JavaScript制成。我已经包括下面的那部分代码:

var req = new Request.JSON({ method: "post", 
     url: "/microsite/toggleRecommend/" , 
     autoCancel: true, urlEncoded: false, secure: false, 
     onFailure: recommendFail, onException: recommendFail, 
     onSuccess: recommendSuccess 
    }); 

    req.send({ data: { mode: 'on'} }); 

使用萤火虫,我可以看到请求的确切格式(这看起来很好),所以希望JavaScript代码并不重要的细节。

+1

我不太了解原始HTTP,但是使用'Accept = application/json',请不要将请求的主体格式化为JSON? – McGarnagle

+0

@dbaseman我也不确定,但我认为这个头文件指定了什么样的数据应该返回 - 操作方法应该返回JSON。 – Oliver

+0

哦,对不起 - 如你所说,问题一定是你正在做一个GET而不是POST请求。 – McGarnagle

回答

1

你的Ajax调用的内容/类型为text/html的,你需要指定你的控制器,你是发送应用程序/ JSON的信息,否则他收到的信息,但不知道如何给它的分发PARAMS

相关问题