2013-09-25 4 views
0

Хотелось бы узнать, как опубликовать данные со страницы и отобразить результат на той же странице? У меня есть контроллер со следующим кодом: я создал отдельное представление «Результат», которое, наконец, направляется в Index.результат процесса и отображение на той же странице 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

один способ это может быть, return partialview() вместо вида() из действия результата. Сделайте result.cshtml, частичный вид. положите это partialview в index.cshtml

0

Вам понадобится примерно 4 модификации.

  1. Создание частичного представления _IndexPartial.cshtml для представления результата, если вы не хотите, чтобы указательный вид, который использует макет? (То же, что и Index.cshtml w/out layout)
  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 в Result View

    т.е. <div id="employee-list"></div>

  4. Изменить Html.BeginForm к Ajax.BeginForm так:

    @using (Ajax.BeginForm («GetEmployees», «Контроллер», новый AjaxOptions() {

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

    }))

Примечание: UpdateTargetId является АЯКС обратного вызова

Смежные вопросы