表单提交后重定向URL

时间:2015-09-18 12:36:26

标签: c# html asp.net-mvc

我有一个基本表单,允许用户创建flyBehaviour(mfly); 。用户选择Employee按钮后,页面应为submit到摘要页面。此摘要页面需要显示redirected表单中添加的详细信息。

例如,我有一个看起来像这样的表单:

enter image description here

用户选择Employee后,应将用户重定向到以下页面:

enter image description here

  

我遇到的问题是获取重定向网址。我的网址如下所示: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 }); } 关于我做错的任何想法?

3 个答案:

答案 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)
{
.....
}