我有这个datamodel: 所以一个项目有很多里程碑。 我做的是这样的:当我进入一个特定项目的细节时,我可以为它添加/创建里程碑,如图中所示:
当我点击“创建里程碑”时,我导航到可创建的视图这个具体项目的里程碑,当我点击保存时,它会自动保存为这个项目。在这里,HttpPost方法:修复Asp.Net MVC中路由网址的错误5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateMilestone([Bind(Include = "Name,Description,FromDate,DueDate,Finished,ProjectID")] Milestone milestone, int? id)
{
if (ModelState.IsValid)
{
var forProject = db.Projects.Where(x => x.ID == id).FirstOrDefault();
if (forProject != null)
{
milestone.Project = forProject;
db.Milestones.Add(milestone);
db.SaveChanges();
return RedirectToAction("Details", forProject);
}
else
{
return HttpNotFound();
}
}
else
{
return View(milestone);
}
}
这里是CreateMilestone视图的屏幕截图,并专注于URL(它的本地主机:XXXXX /项目/ CreateMilestone/3002)。 CreateMilestone方法中的id参数用于项目ID,而url中的id(3002)也用于项目。
我想让应用程序导航到该特定项目的详细信息视图我只是添加了一个里程碑,我实际上做了! 而且正如你所看到的那样:
但是:看看url吧!取而代之的是本地主机:XXXXX /项目/详细信息/ 3002,它是:http://localhost:55623/Projects/Details/3002?Milestones=System.Collections.Generic.HashSet%601%5BTheProjectManager.Models.Milestone%5D&Users=System.Collections.Generic.HashSet%601%5BTheProjectManager.Models.ApplicationUser%5D&ProjectName=Testing&Description=Testing%20data
那么,如何才能让网址如:本地主机:XXXXX /项目/详细信息,当我浏览到细节/ 3002加入后查看新的里程碑?
UPDATE: 的获取详细信息:
public ActionResult Details(int? id)
{
if (id == null)
{
return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Project project = db.Projects.Find(id);
if (project == null)
{
return HttpNotFound();
}
return View(project);
}
和获取CreateMilestone:
public ActionResult CreateMilestone(int? id)
{
var forProject = db.Projects.Where(x => x.ID == id).FirstOrDefault();
if (forProject != null)
{
return View();
}
else
{
return HttpNotFound();
}
}
向我们展示了GET动词 –
更多的代码和文字,图片少的代码。 –
@mparnisari更新,获取详细信息,并得到CreateMilestone方法 – Arianit