MVC ActionLink转到当前控制器

时间:2015-12-01 12:12:54

标签: asp.net-mvc asp.net-mvc-4

在我的MVC网页上,我有一个像这样的ActionLink:

        @Html.ActionLink("Create", "Index", "Project")

视图是Index.cshtml,控制器是“Project”。

点击此链接时,我希望它转到控制器并执行actionResult for Create。 但是当我点击它时,它想要转到/ projects / index 没有任何反应,因为没有调用createresult方法。 它称为索引的动作结果。 所以没有任何实际发生,页面只是刷新。

如果我将Actionlink更改为:

@Html.ActionLink("Create", "Create", "Project")

它试图转到“/ projects / create”但找不到它,因为它不存在。

我的ActionResult代码如下所示:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "projectName,projectType")] Project project)
{
  if (ModelState.IsValid)
  {
    db.Project.Add(project);
    db.SaveChanges();
    return RedirectToAction("Index");
  }

  return View(project);
}

我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

第一个参数是您要显示的文本,第二个是动作,第三个是控制器。

使用它的正确方法是:

@Html.ActionLink("Some text", "Create", "Project")

答案 1 :(得分:0)

好的,让它提交给正确的actionResult。

我所做的是将带有输入的部分放在

@using (Html.BeginForm("Create","Projects"))
{
  @Html.AntiForgeryToken()
  // my html code here
  // submit button here
}

我用提交输入html替换了actionLink。

但是现在我确实得到了正确的ActionResult方法,但仍然没有数据。 我会为此创建一个新问题。

感谢所有的帮助!!

答案 2 :(得分:0)

检查App_Start \ RouteConfig.cs

更改

        routes.MapRoute(
            name: "Default",
            url: "{controller}s/{action}/{id}",
            defaults: new { controller = "home", action = "Index", id = UrlParameter.Optional }
        );

TO

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}",
            defaults: new { controller = "home", action = "Index", id = UrlParameter.Optional }
        );