ASP.NET Core 6 MVC点击搜索按钮后如何保留文本框值
ASP.NET Core 6 MVC 搜索后保留表单输入值的解决方案
下面提供几种可行的解决方法,按需选择:
方法1:通过 ViewBag/ViewData 传递搜索参数
修改控制器代码
在返回视图前,将搜索参数存入ViewBag:
public ActionResult Index(string name, string email) { var emp = _employeeRepository.GetEmployees(); if (!string.IsNullOrEmpty(name)) { emp = emp.Where(x => x.FName.ToLower().Contains(name.ToLower()) || x.LName.ToLower().Contains(name.ToLower())).ToList(); } if (!string.IsNullOrEmpty(email)) { emp = emp.Where(x => x.Email.Contains(email)).ToList(); } // 传递搜索参数到视图 ViewBag.SearchName = name; ViewBag.SearchEmail = email; return View(emp); }
修改视图代码
给输入框添加value属性,绑定ViewBag中的值:
<form class="d-flex" asp-action="Index" asp-controller="Employee"> <input name="name" class="form-control" type="search" placeholder="Name" aria-label="Search" value="@ViewBag.SearchName" /> <input name="email" class="form-control" type="search" placeholder="Email" aria-label="Search" value="@ViewBag.SearchEmail" /> <button class="btn btn-dark" type="submit">Search</button> </form>
方法2:使用强类型视图模型(推荐)
这种方式更符合MVC的架构设计,便于维护和扩展。
创建视图模型类
public class EmployeeSearchViewModel { public string Name { get; set; } public string Email { get; set; } public List<Employee> Employees { get; set; } }
修改控制器代码
实例化视图模型并赋值,将其传递给视图:
public ActionResult Index(string name, string email) { var emp = _employeeRepository.GetEmployees(); if (!string.IsNullOrEmpty(name)) { emp = emp.Where(x => x.FName.ToLower().Contains(name.ToLower()) || x.LName.ToLower().Contains(name.ToLower())).ToList(); } if (!string.IsNullOrEmpty(email)) { emp = emp.Where(x => x.Email.Contains(email)).ToList(); } var viewModel = new EmployeeSearchViewModel { Name = name, Email = email, Employees = emp }; return View(viewModel); }
修改视图代码
指定视图模型,并绑定输入框的value:
@model EmployeeSearchViewModel <form class="d-flex" asp-action="Index" asp-controller="Employee"> <input name="name" class="form-control" type="search" placeholder="Name" aria-label="Search" value="@Model.Name" /> <input name="email" class="form-control" type="search" placeholder="Email" aria-label="Search" value="@Model.Email" /> <button class="btn btn-dark" type="submit">Search</button> </form> <!-- 渲染员工列表示例 --> @foreach (var employee in Model.Employees) { <div>@employee.FName @employee.LName - @employee.Email</div> }
方法3:直接读取请求查询参数(快捷方式)
无需修改控制器,直接在视图中读取URL的查询字符串:
<form class="d-flex" asp-action="Index" asp-controller="Employee"> <input name="name" class="form-control" type="search" placeholder="Name" aria-label="Search" value="@Request.Query["name"]" /> <input name="email" class="form-control" type="search" placeholder="Email" aria-label="Search" value="@Request.Query["email"]" /> <button class="btn btn-dark" type="submit">Search</button> </form>
内容的提问来源于stack exchange,提问作者Rahul Aggarwal
相关产品推荐
相关产品推荐

