使用MVC控制器作为Web服务

时间:2011-12-16 21:47:50

标签: c# javascript jquery jstree

这是我的项目hirarchy:

enter image description here

来自browser.js的

我正在尝试调用ManagerController:

 $("#jstree").jstree({
        "json_data": {

    "ajax": {   


                type: "GET",
                async: true,
                "url": "Controllers/Manager/Getlocations?userId='1234'",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                cache: false,
                success: function (msg) {                         
                        return msg;
                },
                error: function () {
                    // TODO process error
                }
            },

//continuation is less relevant

但是我在chrome控制台中遇到以下错误:

  

GET   http://localhost:1186/MainUgi/Controllers/Manager/Getlocations?userId= '1234' &安培; _ = 1324071607446   404(未找到)

1)什么是正确的道路?

2)什么是&_=1324071607446什么是连接到我的get请求的结尾?

更新

我的控制器看起来像:

  public class ManagerController : Controller
    {

        public JsonResult GetLocations(string userId)
        {
            var locationsJson = 
            new {[  {"data": "[0]", .. some data...}  ]};

            return Json(locationsJson, JsonRequestBehavior.AllowGet);
        }

我的请求如下:

Request URL:http://localhost:1186/MainUgi/Controllers/Manager/Getlocations?userId=1234
Request Method:GET
Status Code:404 Not Found
Request Headersview source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Charset:windows-1255,utf-8;q=0.7,*;q=0.3
Accept-Encoding:gzip,deflate,sdch
Accept-Language:he-IL,he;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Type:application/json; charset=utf-8
Host:localhost:1186
Referer:http://localhost:1186/MainUgi/browser.htm
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.63 Safari/535.7
X-Requested-With:XMLHttpRequest
Query String Parametersview URL encoded
userId:1234
Response Headersview source
Cache-Control:private
Connection:Close
Content-Length:2346
Content-Type:text/html; charset=utf-8
Date:Fri, 16 Dec 2011 22:00:37 GMT
Server:ASP.NET Development Server/10.0.0.0
X-AspNet-Version:4.0.30319

TIA

3 个答案:

答案 0 :(得分:2)

希望这会有所帮助:

  1. 尝试从userId='1234' - >中删除单引号userId=1234
  2. _=1324071607446参数是jQuery,在请求网址末尾添加时间戳以防止缓存(请注意您使用cache: false的方式)。

答案 1 :(得分:2)

基本的MVC网址掩码如下:

/{CONTROLLER}/{ACTION}?{...PARAMETERS}

通过你的例子,我们有:

'/manager/getLocations?userId=1234'

控制器应具有以下代码(示例):

[ControllerAction]
public void getLocations( int userId ) {
    ViewData["UserId"] = userId;
    RenderView("GetLocations");
}

现在您需要有一个视图文件来显示内容。创建一个文件夹(在项目的根目录中),名为“View”,在其中创建另一个具有控制器名称(Manager)的文件夹,并创建一个名为“GetLocations.aspx”的视图文件(我们的那个)想要被渲染)。

在视图中打印UserId变量:

<%= ViewData["UserId"] %>

如果它不起作用,最好阅读很多关于MVC模式的内容。您可以启动here

答案 2 :(得分:0)

尝试将网址和数据分成两个单独的命令:

url:  "Controllers/Manager/Getlocations",
data: { userId: '1234' }

如果您重载该方法,请尝试将该方法标记为[HttpGet]。