asp.net mvc 5 Как получить идентификатор из URL и сохранить его в другой таблице

1

Эй, я использую бритву mvc 5, и я новичок в этом.

Я хочу получить идентификатор проекта, который я укажу в URL-адресе eg/bug/create/4 (число 4 означает id проекта).

и сохраните его в таблице ошибок

 [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include="BugID,Title,Description,AssigneeID,Priority,Status,Projects_ProjectID")] Bug bug, int id)
        {
            var currentUser = manager.FindById(User.Identity.GetUserId()); 
            // is empty in DB
            ViewBag.getIdFromUrlIsHere =id; 

            if (ModelState.IsValid)
            {
                bug.User = currentUser;

                // I get an error here
                bug.Projects = id;


                db.Bugs.Add(bug);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            ViewBag.AssigneeID = new SelectList(db.Users, "Id", "UserName", bug.AssigneeID);
            return View(bug);
        }

Может кто-нибудь мне помочь?

Ошибка, которую я получаю, не может конвертировать в int, если я меняю int id в моем параметре на строку. Я получаю ту же ошибку

МОЙ БУГОВОЙ ТАБЛИЦ

CREATE TABLE [dbo].[Bugs] (
[BugID]              INT            IDENTITY (1, 1) NOT NULL,
[Title]              NVARCHAR (50)  NOT NULL,
[Description]        NVARCHAR (MAX) NOT NULL,
[AssigneeID]         NVARCHAR (128) NULL,
[Priority]           NVARCHAR (MAX) NOT NULL,
[Status]             NVARCHAR (MAX) NOT NULL,
[ApplicationUser_Id] NVARCHAR (128) NULL,
[Projects_ProjectID] INT            NULL,
[User_Id]            NVARCHAR (128) NULL,
CONSTRAINT [PK_dbo.Bugs] PRIMARY KEY CLUSTERED ([BugID] ASC),
CONSTRAINT [FK_dbo.Bugs_dbo.AspNetUsers_ApplicationUser_Id] FOREIGN KEY ([ApplicationUser_Id]) REFERENCES [dbo].[AspNetUsers] ([Id]),
CONSTRAINT [FK_dbo.Bugs_dbo.Projects_Projects_ProjectID] FOREIGN KEY ([Projects_ProjectID]) REFERENCES [dbo].[Projects] ([ProjectID]),
CONSTRAINT [FK_dbo.Bugs_dbo.AspNetUsers_AssigneeID] FOREIGN KEY ([AssigneeID]) REFERENCES [dbo].[AspNetUsers] ([Id]),
CONSTRAINT [FK_dbo.Bugs_dbo.AspNetUsers_User_Id] FOREIGN KEY ([User_Id]) REFERENCES [dbo].[AspNetUsers] ([Id])
);

GO
CREATE NONCLUSTERED INDEX [IX_ApplicationUser_Id]
    ON [dbo].[Bugs]([ApplicationUser_Id] ASC);

GO
CREATE NONCLUSTERED INDEX [IX_Projects_ProjectID]
    ON [dbo].[Bugs]([Projects_ProjectID] ASC);

GO
CREATE NONCLUSTERED INDEX [IX_AssigneeID]
    ON [dbo].[Bugs]([AssigneeID] ASC);

GO
CREATE NONCLUSTERED INDEX [IX_User_Id]
    ON [dbo].[Bugs]([User_Id] ASC);
  • 0
    Я предполагаю, что Projects - это класс, а не int. Вы заполняете правильное поле? Ваш поставщик базы данных может помещать только значения int в столбцы данных int
  • 0
    Как я могу это исправить?
Показать ещё 4 комментария
Теги:
razor
asp.net-mvc
asp.net-mvc-4

1 ответ

0
Лучший ответ

Хорошо, считая, что идентификатор, который вы передаете, является идентификатором проекта, который вы могли бы исправить его двумя способами:

if (ModelState.IsValid)
{
            bug.User = currentUser;

            //Retrieve the project from the database
            var projectRecord = db.Projects.FirstOrDefault(p=>p.ProjectID == id);
            bug.Projects = projectRecord;


            db.Bugs.Add(bug);
            db.SaveChanges();
            return RedirectToAction("Index");
}

Или

if (ModelState.IsValid)
{
            bug.User = currentUser;

            //Set the project ID directly(i'm assuming you have a projectID property)
            bug.Projects_ProjectID = id;

            db.Bugs.Add(bug);
            db.SaveChanges();
            return RedirectToAction("Index");
}
  • 0
    Большое спасибо за решение этого !!!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню