C#如何调用MVC动作并将结果赋给js变量

时间:2013-08-19 09:41:15

标签: c# javascript asp.net-mvc razor

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

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

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

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

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

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

任何提示赞赏......

亲切的问候

5 个答案:

答案 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讨论。

您也可以在asp.net MVC3 and jquery AJAX tutorial

上查看SO问题

答案 4 :(得分:0)

你应该使用引号

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