在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的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MVC 应用程序中从 JavaScript 解析相对路径
无法在 ASP.NET MVC 5 中从视图到控制器获取 Select2 标记值
如何在 Javascript 中从 Spring 获取 JSON 响应