2015-02-17 3 views
0

Мой вопрос: как получить автоматически увеличивающийся первичный ключ из метода POST в контроллере1 и использовать его как внешний ключ в методе GET в контроллере2?MVC 4 отправил первичный ключ

В настоящее время весь код сгенерирован с помощью EF, где я сначала использую базу данных.

Думаю, мне нужно отредактировать метод GET в контроллере2, который выглядит следующим образом.

// GET: /Question/Create 

    public ActionResult Create() 
    { 
     ViewBag.TestId = new SelectList(db.Tests, "TestId", "TestTitle"); 
     return View(); 
    } 

Это один возвращает список TestTitles

Все, что нужно для того, чтобы вернуть последнюю вставленную «TestID» или же вставить «TestID» в текущей сессии. Его целое число. Как мне это сделать ?

+0

Не увеличивайте его, просто введите LAST_INSERT_ID сразу после вставки записи и передайте ее во второе действие контроллера. – BabyDuck

ответ

0

Создание ActionResult с тем же именем, так как вы не используете модель, вы можете просто получить значение из FormCollection класса

Если предположить, что у вас есть selectlist было создать, как это

@Html.DropDownListFor("TestId",ViewBag.TestId); 

Определить другое действие для того же точки зрения, как это:

[HttpPost] 
public ActionResult Create(FormCollection formData) 
{ 
    formData["TestId"] 
    return View(); 
} 

тем не менее, я настоятельно рекомендовал использовали модель, и избежать использование ViewBag.

0

Вы можете получить идентификатор от объекта после сохранения:

db.Foos.Add(foo); 
db.SaveChanges(); 
var pk = foo.Id; 

А как передать это вместе, при условии, что вы должным образом следуя GET-POST-Перенаправление шаблон, вам нужно включить его в URL-адрес для перенаправления. Как именно, зависит от вашей подписи действий и маршрут, но в целом вы будете делать что-то вроде следующего:

return RedirectToAction("SomeAction", new { id = foo.Id }); 
0

Вместо того, чтобы пытаться получить идентификатор в методе GET я понял, что я мог бы найти и использовать это в методе POST, где я вставляю информацию в базу данных. Поиск последнего вставленного идентификатора с помощью выражения Lambda позволяет вставить правильное значение внешнего ключа. Вероятно, это будет мое временное решение, пока я не улучшу свою структуру.

[HttpPost] 
    public ActionResult Create(Question question) 
    { 
     if (ModelState.IsValid) 
     { 

      question.TestId = db.Tests.OrderByDescending(t => t.TestId).FirstOrDefault().TestId; 
      db.Questions.Add(question); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     ViewBag.TestId = new SelectList(db.Tests, "TestId", "TestTitle", question.TestId); 
     return View(question); 
    }` 
Смежные вопросы