我一直在努力实现以下目标:
调用我的动作(返回json):
@{ var response = Html.Action("Login", "Auth"); }
并将我的json响应分配给全局javascript变量:
<script type="text/javascript">
var response = @response;
user = response.details;
</script>
然而,我似乎无法以我需要的方式工作。响应未正确分配。是否有一个返回json的动作调用?我知道我可以使用ajax,但这不是一个有效的选项,因为我必须在调用document.ready之前设置全局变量。
任何提示赞赏......
亲切的问候
答案 0 :(得分:3)
您可以直接使用JavaScriptResult
。见MSDN Doc
public JavaScriptResult Example()
{
return new JavaScript("var response = 10");
}
与
相关的有用的人但我建议您使用$.getJSON()或$.Ajax()代替
答案 1 :(得分:2)
如果您想要JSON响应,请使用$.getJSON(), $.post(), $.Ajax()
答案 2 :(得分:1)
不要像方法调用那样尝试使用Html.Action
,而是使用Html.RenderAction
并使用该操作将任何必要的JavaScript转储到您的页面。 e.g。
<强> AuthController.cs 强>
public class Auth : Controller
{
/* snip */
[ChildActionOnly]
public ActionResult Login()
{
return View(/* model? */);
}
}
<强>〜/查看/认证/ Login.cs 强>
<script>
var auth = @whateverinformation;
</script>
原始视图
@{ Html.RenderAction("Login", "Auth"); }
<script>
user = auth.details;
</script>
现在/Auth/Login
可以放在任何页面上,内容包含在服务器级别(而不是AJAX的补充)
如果 没有为你做,请考虑制作一个显示信息的HTML助手,而不是像普通方法那样尝试使用控制器动作。类似的东西:
public static IHtmlString Auth_Login(Htmlhelper htmlhelper)
{
String response;
/* assign response */
return new HtmlString(response); /* or maybe MvcHtmlString */
}
实现:
<script>
var response = @Html.Auth_Login();
user = response.details;
</script>
答案 3 :(得分:0)
您可以查看Evolving Practices in Using jQuery and Ajax in ASPNET MVC Applications上的Channel9讨论。
上查看SO问题答案 4 :(得分:0)
你应该使用引号
<script type="text/javascript">
var response = "@response";
...