2013-09-25 229 views
0

我想知道如何从页面发布数据并在同一页面显示结果?我有一个具有以下代码的控制器:我创建了一个单独的视图“结果”,最终指向索引。处理结果并显示在同一页面asp.net mvc

//EmployeeController.cs 
public ActionResult Index (List<Employee> employees = null) 
{ 
    employees = employees == null 
     ? db.Employees.Include(e => e.Department).ToList() 
     : employees; 

    return View(employees);     
} 

public ActionResult Result(Employee employee, decimal minsal,decimal maxsal) 
{ 
    var employees = db.Employees.Include(e => e.Department); 
    employees = db.Employees 
     .Where(p => p.DepartmentID == employee.DepartmentID 
      && p.Salary > minsal && p.Salary < maxsal); 

    var empList = employees.ToList(); 

    ViewBag.DepartmentID = new SelectList(db.Departments, "DepartmentID", "DeptName", employee.DepartmentID); 

     return View("Index", empList);   
    } 

查看:(Result.cshtml)

@model _4th_assignment.Models.Employee 

@{ 
    ViewBag.Title = "Result"; 
} 

<h2>Result</h2> 

@using (Html.BeginForm()) 
{ 
    <p> 
     Select Department: @Html.DropDownList("DepartmentID", "--select--") 
    </p> 
    <p> 
     Enter Salary Range: Min @Html.TextBox("minsal")  Max  
     @Html.TextBox("maxsal") 
    </p> 
    <p> <input type="submit" value="Filter" /></p> 
} 

我已经创建了索引页面的链接 “过滤器与工资范围和部门的职员”。当我点击这个链接时,它会进入结果页面,然后筛选结果显示在索引页面中。

查看:(index.cshtml)

@model IEnumerable<_4th_assignment.Models.Employee> 

@{ 
    ViewBag.Title = "Index"; 
} 

<h2>Index</h2> 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 
<p> 
    @Html.ActionLink("filter the employees with salary range and department ", "Result") 
</p> 
<table> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.FirstName) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.MiddleName) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.LastName) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Salary) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Department.DeptName) 
     </th> 
     <th></th> 
    </tr> 

    @foreach (var item in Model) 
    { 
     <tr> 
      <td> 
       @Html.DisplayFor(modelItem => item.FirstName) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.MiddleName) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.LastName) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Salary) 
      </td> 
      <td> 
       @Html.DisplayFor(modelItem => item.Department.DeptName) 
      </td> 
      <td> 
       @Html.ActionLink("Edit", "Edit", new { id=item.EmployeeID }) | 
       @Html.ActionLink("Details", "Details", new { id=item.EmployeeID }) | 
       @Html.ActionLink("Delete", "Delete", new { id=item.EmployeeID }) 
      </td> 
     </tr> 
    } 
</table> 

现在我想做的事情是,如果我点击链接在索引页它shuold要“过滤薪金范围和部门的职员”输入索引页中,结果也应该只显示在索引页中。

回答

0

这样做的一种方法是, 从Result操作返回partialview()而不是view()。 使result.cshtml,partialview。 在index.cshtml中放入了此部分视图

0

您需要大致4次修改。

  1. 创建一个_IndexPartial.cshtml部分视图专门用于结果视图,除非您确实需要使用布局的索引视图? (与Index.cshtml w/out布局相同)
  2. 创建一个ActionResult,该返回此部分视图的列表为IEnumerable<_4th_assignment.Models.Employee

    public ActionResult GetEmployees(int deptId) 
    { 
        var employees = from a in db.Employees 
            select a; 
        employees = employees.Where(a => a.DeptId.Equals(deptId)); 
    
        //... code here 
    
        return PartialView("_IndexPartial", employees); 
    } 
    
  3. 在结果视图创建一个空div

    即:<div id="employee-list"></div>

  4. 变化Html.BeginFormAjax.BeginForm这样的:

    @using( Ajax.BeginForm(“GetEmployees”,“Controller”,new AjaxOptions() {

    HttpMethod = "POST", 
    UpdateTargetId = "employee-list", 
    InsertionMode = InsertionMode.Replace 
    

    }))

注:UpdateTargetId是一个AJAX回调

相关问题