2015-09-18 3 views
0

У меня есть базовая форма, которая позволяет пользователю создать Employee. Как только пользователь выбирает кнопку submit, страница должна быть redirected на итоговую страницу. Эта сводная страница должна показать детали, которые были добавлены в форме Employee.URL-адрес перенаправления после отправки формы

К примеру, у меня есть форма, которая выглядит следующим образом:

enter image description here

После того, как пользователь выбирает Submit, он должен затем перенаправить пользователя на следующей странице:

enter image description here

Проблема, с которой я сталкиваюсь, получает этот адрес redirect url. Мой url выглядит примерно так: http://www.localhost.com/Employee/1234/1234 представляет собой Employee id. Как я могу потянуть этот Employee Id?

Мой текущий HTML

<button type="submit" name="saveButton" id="saveBtn" class="btn btn-primary">Submit</button> 

Пожалуйста, обратите внимание, что я использую .NET, поэтому я открыт для использования Razor Syntax.

Обновление рассказа

После rea все ваши комментарии, я пошел и углубился в мою проблему. Это то, что я нашел.

Существует RouteConfig.cs файла с следующим маршрутом:

routes.MapRoute(
    name: "ListEmployee", 
    url: "Employee/{employeeId}", 
    defaults: new { controller = "Employee", action = "List"}, 
    constraints: new {employeeId = "\\d+"} 
) 

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

[HttpPost] 
public ActionResult AddEmployee(ViewModel<EmployeeModel> model) 
{ 
    // logic here 

    return RedirectToAction("ListEmployee", new { employeeId = model.Body.Employee.Id, fromEmployeeProject = true }); 
} 

Issue: Это полностью сбой. Заявив: No route in the route table matches the supplied values. Любые идеи о том, что я делаю неправильно?

+0

После отправки формы мой код должен будет найти «EmployeeId», который будет назначен этому пользователю. Например, после отправки мой «URL» будет выглядеть примерно так: «http: // www.localhost.com/Employee/1234' – ChaseHardin

+0

вам нужен идентификатор сотрудника, чтобы вы могли отображать недавно добавленный объект« Сотрудник » на странице «резюме»? – trashr0x

+0

Точно. Мне нужен «Id Employee Id», чтобы я мог просмотреть сводку для этого конкретного «Employee» – ChaseHardin

ответ

2

Если вы используете Entity Framework (EF), то каждый оператор INSERT ссылается на SCOPE_IDENTITY(), когда используются автоматически генерируемые идентификаторы.

SCOPE_IDENTITY возвращает последнее значение идентификации, вставленное в столбец идентичности в той же области видимости. (MSDN)

Таким образом, если ваш Employee ID является автоматически генерируемый столбец в базе данных, вы должны быть в состоянии получить идентификатор сразу после сохранения изменений:

[HttpPost] 
public ActionResult Add(Employee employee) 
{ 
    using (var context = new MyContext()) 
    { 
     // add the employee object 
     context.Employees.Add(employee); 
     // save changes 
     context.SaveChanges(); 
     // the id will be available here 
     int employeeId = employee.Id; 
     // ..so perform your Redirect to the appropriate action, _ 
     // and pass employee.Id as a parameter to the action  
     return RedirectToAction("Index", "Employee", new { id = employeeId });    
    } 
} 

Очевидно вы убежище Мы предоставили нам ваш контроллер и имена действий, поэтому убедитесь, что вы замените их соответствующими значениями.

+0

Спасибо @ trashr0x, я вырыл глубже из-за вашего сообщения, но в итоге столкнулся с другой ошибкой. Я обновил свою историю, чтобы отразить эту ошибку. Есть идеи? – ChaseHardin

+0

Да, попробовал, и он возвращает ту же ошибку. – ChaseHardin

+0

Я предполагаю, что это имеет какое-то отношение к моему 'new {......}' – ChaseHardin

3

Один из наиболее распространенных способов сделать это - вернуть другой вид из вашего действия, который вы вызываете из формы сотрудника. Например скажем ваш сотрудник Формы называет EmployeeController-> Добавить (Служащий сотрудник) действие

Внутри вашего Сотрудника действий вы будете иметь что-то вроде этого:

[HttpPost] 
public ActionResult Add(Employee employee) 
{ 
    // process request and create new employee in repository 

    return View("Summary"); 
} 

Другой способ сделать это, чтобы позвонить RedirectToAction (), это похоже на Response.Redirect() в ASP.NET WebForms.

[HttpPost] 
public ActionResult Add(Employee employee) 
{ 
    // process request and create new employee in repository 

    return RedirectToAction("Summary"); 
} 

Вы также можете переадресовать метод переадресации.Это заставит браузер получить 302 ошибку и перенаправить к контроллеру/действие, указанное

[HttpPost] 
public ActionResult Add(Employee employee) 
{ 
    // process request and create new employee in repository 

    return Redirect("YourController/Summary"); 
} 
+0

Спасибо за ваш ответ. Будет ли этот подход позволять мне вытащить «Идентификатор сотрудника»? – ChaseHardin

+0

Да, вам нужно правильно построить свой маршрут, чтобы вы могли получить идентификатор сотрудника, пожалуйста, взгляните на https://msdn.microsoft.com/en-us/library/cc668201.aspx или на этот http: // www. codeproject.com/Articles/641783/Customizing-Routes-in-ASP-NET-MVC –

+0

Спасибо @ Vlad Bezden, я пошел и посмотрел глубже из-за вашего поста, и теперь у вас новая проблема. Я обновил свою историю, чтобы отразить эту проблему. – ChaseHardin

0

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

<input type="hidden" name="id" value="[value]" /> 

в вашем контроллер:

[HttpPost] 
public ActionResult [ActionName] (int id) 
{ 
..... 
employeeRepository.Save(employee); 
return RedirectToAction("Summary", new {id}); 
} 

и в сводке действий:

public ActionResult Summary(int id) 
{ 
..... 
} 
Смежные вопросы