MVC控制器方法未被调用

时间:2016-02-18 17:13:57

标签: c# asp.net-mvc

我正在学习MVC5中的Async / Await。我创建了这个演示应用程序,但我的控制器操作方法没有被解雇。它给出了“资源无法找到”。错误。这是代码。

  1. _Layout.cshtml view

    @Html.ActionLink("ASYNC", "GetNames", "Async")
    
  2. GetNames.cshtml视图

    @Html.ActionLink("Click Me", "GetFirstName", "Async", null,  new{@class = "btn btn-primary" })
    @if (ViewBag.FName != null)
    {
      <p>
         <label>@ViewBag.FName </label>
      </p>
    }
    
  3. 在AsyncController.cs文件中

    public ActionResult GetNames()
    {
        return View();
    }
    
    [HttpPost]
    public async Task<ActionResult> GetFirstName()
    {
        var r = await GetFirstNameFromDB();
        ViewBag.FName = r;
        return View("GetNames");
    }
    public async Task<string> GetFirstNameFromDB()
    {
        try
        {
            var res = await Task.Run(() =>
            {
                Thread.Sleep(3000);
                return "TestFName";
            });
    
            return res;
        }
        catch (Exception)
        {
            return "Error in getting FirstName";
        }
    }
    
  4. 现在,每当我点击操作链接按钮调用GetFirstName时,都会显示The resource cannot be found.错误。我不确定它是否与async或其他内容相关。

1 个答案:

答案 0 :(得分:6)

您已定义app.run(['$rootScope', '$route', '$templateCache', function ($rootScope, $route, $templateCache) { $rootScope.changeRoute = function(){ var currentPageTemplate = $route.current.templateUrl; $templateCache.remove(currentPageTemplate); $route.reload(); }; }]); ,当您点击它时,它会执行GET请求。

控制器的方法ActionLink定义为GetFirstName。将此更改为HttpPost将确保该操作可用于GET请求。