修复Asp.Net MVC 5中路由URL的错误

时间:2016-10-17 17:29:19

标签: c# asp.net-mvc asp.net-routing

我有这个数据模型:enter image description here 所以一个项目有很多里程碑。 我做的是这样的:当我查看特定项目的细节时,我可以为它添加/创建里程碑,如图所示:enter image description here 当我点击"创建里程碑"我导航到View,我可以为此特定项目创建里程碑,当我单击保存时,它将自动保存到此项目中。这里是HttpPost方法:

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 View的屏幕截图,重点关注url(它的localhost:xxxxx / Projects / CreateMilestone / 3002)。 CreateMilestone方法中的id参数用于项目ID,而在url中,id(3002)也用于项目。 enter image description here

我试图让应用程序导航到该特定项目的详细信息视图我刚刚添加了一个里程碑,我实际上做了! 正如你所看到的那样: enter image description here

但是:看看网址!它不是localhost:xxxxx / Projects / Details / 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

那么,当我在添加新的里程碑后导航到详细信息视图时,如何将网址设置为:localhost:xxxxx / Projects / Details / 3002?

更新: 获取详细信息:

public ActionResult CreateMilestone(int? id)
    {
        var forProject = db.Projects.Where(x => x.ID == id).FirstOrDefault();

        if (forProject != null)
        {
            return View();
        }
        else
        {
            return HttpNotFound();
        }            
    }

和Get CreateMilestone:

#include <iostream>

using namespace std;  

void func(void)
{
    int a = 0;
    cout << &a << endl;
}


int main(void)
{
    func();
    func();
    func();
    func();
    system("pause");
    return 0;
}

2 个答案:

答案 0 :(得分:2)

在这一行

return RedirectToAction("Details", forProject);

您正在重定向到Details操作,并作为参数发送“Project”对象,该对象被序列化为查询字符串。您可以只使用id而不是完整对象。但您还需要将Details操作更改为接受int作为参数而不是Project

答案 1 :(得分:1)

而不是return RedirectToAction("Details",forProject); 试试这个return RedirectToAction("Details", new { id = id });