C# Html表单使用
我正在尝试将搜索表单添加到我的网页:C# Html表单使用,c#,asp.net-mvc,controller,C#,Asp.net Mvc,Controller,我正在尝试将搜索表单添加到我的网页: @using (Html.BeginForm("CheckCourses", "Home", new { programId = ViewBag.ProgramId }, FormMethod.Get)) { <p class="col-md-12"> Find by course or teacher name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as
@using (Html.BeginForm("CheckCourses", "Home", new { programId = ViewBag.ProgramId }, FormMethod.Get))
{
<p class="col-md-12">
Find by course or teacher name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
<input type="submit" value="Search Course" class="btn-primary" />
</p>
}
更新
控制员应要求:
public class HomeController : BaseController
{
public ActionResult Index()
{
return View("Index", _programService.Programs.ToList());
}
public ActionResult CheckCourses(int programId, string searchString, int? page) {
var courses = from s in _courseService.Courses select s;
if (searchString != null)
{
page = 1;
}
ViewBag.CurrentFilter = searchString;
ViewBag.ProgramId = programId;
if (!String.IsNullOrEmpty(searchString))
{
searchString = searchString.ToLower();
courses = courses.Where(s => s.CrsName.ToLower().Contains(searchString) || s.EducationUser.FullName.ToLower().Contains(searchString));
}
courses = courses.OrderBy(s => s.Id);
int pageSize = 20;
int pageNumber = (page ?? 1);
return View("Courses",courses.ToPagedList(pageNumber, pageSize));
}
}
更新2
呈现的
元素显示函数运行良好,但按下搜索按钮时问题仍然存在:
<form action="/Home/CheckCourses?programId=2" method="get">
<p class="col-md-12">
Find by course or teacher name: <input id="SearchString" name="SearchString" type="text" value="">
<input type="submit" value="Search Course" class="btn-primary">
</p>
</form>
按课程或教师姓名查找:
尝试将programId参数移动到隐藏字段中:
@using (Html.BeginForm("CheckCourses", "Home", FormMethod.Get)){
<p class="col-md-12">
@Html.Hidden("programId", ViewBag.ProgramId)
Find by course or teacher name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
<input type="submit" value="Search Course" class="btn-primary" />
</p>
}
@使用(Html.BeginForm(“CheckCourses”、“Home”、FormMethod.Get)){
@Html.Hidden(“programId”,ViewBag.programId)
按课程或教师姓名查找:@Html.TextBox(“SearchString”,ViewBag.CurrentFilter为字符串)
}
您还可以为该视图粘贴HTTPGet Controller方法吗?@MichaelBurns我添加了CheckCourses
动作控制器,将程序ID显式地强制转换为int,如new{programId=(int)ViewBag.programId}
。您可以通过表单元素的呈现HTML吗?您还可以尝试为programID添加一个html.hiddenfor
,如下所示:wll@lte__What控制器方法用于渲染窗体视图并添加原始ViewBag.ProgramId?您是否使用相同的方法CheckCourses来呈现搜索表单并发回搜索字符串?哦,哇,这样做了(使用int
而不是string
)。你能解释一下原因吗?当你点击search时,它出现了。当你在BeginForm helper方法中声明它时,它覆盖了你现有的programId参数。当你使用FormMethod.Get时,任何参数值都会被表单数据覆盖:我想我在回答正确之前的半个小时的评论是:为ProgramId添加一个html.hiddenfor
,不需要(int)
,因为querystring中的所有数据都是可为null的字符串类型,因此得名。
@using (Html.BeginForm("CheckCourses", "Home", FormMethod.Get)){
<p class="col-md-12">
@Html.Hidden("programId", ViewBag.ProgramId)
Find by course or teacher name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
<input type="submit" value="Search Course" class="btn-primary" />
</p>
}