2

我一直在努力实现以下目标:

调用我的操作(返回 json):

@{ var response = Html.Action("Login", "Auth"); }

并将我的 json 响应分配给全局 javascript 变量:

<script type="text/javascript">
    var response = @response;      
    user = response.details;
</script>

但是我似乎无法让它按照我需要的方式工作。未正确分配响应。是否有返回 json 的动作调用?我知道我可以为此使用 ajax,但这不是一个有效的选项,因为我必须在调用 document.ready 之前设置全局变量。

任何提示表示赞赏...

亲切的问候

4

5 回答 5

3

你可以JavaScriptResult直接使用。请参阅MSDN 文档

public JavaScriptResult Example()
{
    return new JavaScript("var response = 10");
}

相关的有用赞

但我建议您改用 $.getJSON()$.Ajax( )

于 2013-08-19T09:46:18.307 回答
2

$.getJSON(), $.post(), $.Ajax()如果您想要返回 JSON 响应,请改用

于 2013-08-19T09:45:50.437 回答
1

不要尝试Html.Action像方法调用那样使用,而是使用Html.RenderAction并使用该操作将任何必要的 JavaScript 转储到您的页面。例如

AuthController.cs

public class Auth : Controller
{
    /* snip */

    [ChildActionOnly]
    public ActionResult Login()
    {
        return View(/* model? */);
    }
}

~/Views/Auth/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>
于 2013-08-19T13:21:08.483 回答
0

您可以查看 Channel9 关于在 ASPNET MVC 应用程序中使用 jQuery 和 Ajax 的发展实践的讨论。

您还可以查看asp.net MVC3 和 jquery AJAX 教程上的 SO 问题

于 2013-08-19T09:48:09.180 回答
0

你应该使用引号

<script type="text/javascript">
    var response = "@response";
...
于 2013-08-19T14:30:12.710 回答