在我的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);
}
我该如何解决这个问题?
答案 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 }
);