我有一个基本表单,允许用户创建flyBehaviour(mfly);
。用户选择Employee
按钮后,页面应为submit
到摘要页面。此摘要页面需要显示redirected
表单中添加的详细信息。
例如,我有一个看起来像这样的表单:
用户选择Employee
后,应将用户重定向到以下页面:
我遇到的问题是获取重定向网址。我的网址如下所示:http://www.localhost.com/Employee/1234/
Submit
代表1234
ID。如何提取Employee
?
我当前的HTML
Employee Id
请注意我使用的是.NET,因此我愿意使用
<button type="submit" name="saveButton" id="saveBtn" class="btn btn-primary">Submit</button>
故事更新
在阅读完所有评论之后,我开始深入研究我的问题。这就是我发现的。
有一个Razor Syntax.
文件,其中包含以下路径:
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 }); }
关于我做错的任何想法?
答案 0 :(得分:3)
最常见的做法之一是从您从Employee Form调用的Action中返回不同的View。例如,假设您的员工表单调用EmployeeController-&gt;添加(员工员工)操作
在您的员工行动中,您将拥有以下内容:
[HttpPost]
public ActionResult Add(Employee employee)
{
// process request and create new employee in repository
return View("Summary");
}
另一种方法是调用RedirectToAction(),这类似于ASP.NET WebForms中的Response.Redirect()。
[HttpPost]
public ActionResult Add(Employee employee)
{
// process request and create new employee in repository
return RedirectToAction("Summary");
}
您也可以调用Redirect方法。这将导致浏览器收到302错误并重定向到您指定的控制器/操作
[HttpPost]
public ActionResult Add(Employee employee)
{
// process request and create new employee in repository
return Redirect("YourController/Summary");
}
答案 1 :(得分:2)
如果您正在使用实体框架(EF),则在使用自动生成的ID时会使用INSERT
跟踪每个SCOPE_IDENTITY()
语句。
SCOPE_IDENTITY返回插入同一范围内的标识列的最后一个标识值。 (MSDN)
因此,如果您的Employee
ID是数据库中自动生成的列,则应该可以在保存更改后立即获取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 });
}
}
显然,您没有向我们提供您的控制器和操作名称,因此请确保使用适当的值替换它们。
答案 2 :(得分:0)
要获取ID,您可以在视图中添加隐藏的输入类型:
<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)
{
.....
}