在javascript中从控制器MVC获取json

Posted

技术标签:

【中文标题】在javascript中从控制器MVC获取json【英文标题】:get json from controller MVC in java script 【发布时间】:2017-08-05 09:06:33 【问题描述】:

我正在尝试制作一些 mvc 应用程序,但遇到了问题。我想从 javascript 文件中的 mvc 控制器获取 json:

JS:

var actionUrl = '@Url.Action("GetJsonTest", "JsonTest")';
$.getJSON(actionUrl, function (response) 
    if (response != null) 
        var html = "<li>" + response.Id + " " + response.Name + " " + response.Author + "</li>";
        $("h2").append(html);
    
);

控制器:

[HttpGet]
public ActionResult GetJsonTest() 
    var books = new Book() 
        Id = '1',
        Name = "1+1",
        Author = "Varnava",
        Price = 100
    ;
    return Json(books, JsonRequestBehavior.AllowGet);

它不工作。我有 404 错误。它无法从控制器中获取任何东西。我究竟做错了什么?抱歉英语不好。希望你明白我的要求。

【问题讨论】:

控制器的名称是什么?从你的 Url.Action,我会假设 JsonTest,但它实际上是否称为 JsonTestController.cs? 只要您的 GetJsonTest 方法在 JsonTestController.cs 内,您的代码就应该可以工作 @sleeyuen hi,是的,其实它叫JsonTestController。 cshtml 文件将由 MVC 模板服务器解释。其他任何东西都不会,因此您的 js 文件正在尝试向 url '@Url.Action("GetJsonTest", "JsonTest")' 发出文字请求。如果您在浏览器中进行了一些调试,这将立即显而易见。 @csharpbd 陷阱。我懂了。谢谢! 【参考方案1】:

您提到您正试图从 一个 javascript 文件:js 调用 GetJsonTest。您曾经使用

生成ajax url
var actionUrl = '@Url.Action("GetJsonTest", "JsonTest")';

上面的 Razor 声明来自.js 文件。问题是javascript 文件无法执行Razor 语句。但在.cshtml 可以。因此,如果您在.cshtml 中使用javascript 中的Razor 语句,它将起作用,如果您在.js 中使用javascript 中的Razor 语句,它将不起作用。您必须从.js 文件中这样调用:

var actionUrl = '/JsonTest/GetJsonTest';
$.getJSON(actionUrl, function (response) 
    if (response != null) 
        $("h2").append("<li>" + response.Id + " " + response.Name + " " + response.Author + "</li>")
    
);

【讨论】:

【参考方案2】:

你是否在你的 routeconfig.cs 中定义了路由?

你应该有类似的东西

   public class RouteConfig
    
        public static void RegisterRoutes(RouteCollection routes)
        
                routes.MapRoute(
                name: "YOUR NAME",
                url: "YOUR CONTROLLER NAME/GetJsonTest",
                defaults: new  controller = "YOUR CONTROLLER NAME", action = "GetJsonTest" 
            );
    
    

【讨论】:

以上是关于在javascript中从控制器MVC获取json的主要内容,如果未能解决你的问题,请参考以下文章

JSTree在MVC4中从视图调用到控制器

如何在 MVC 应用程序中从 JavaScript 解析相对路径

无法在 ASP.NET MVC 5 中从视图到控制器获取 Select2 标记值

如何在 Javascript 中从 Spring 获取 JSON 响应

如何在使用 .NET Core 的控制台应用程序中从 appsettings.json 获取值?

将JSON数组从javascript传递给spring mvc控制器