我在页面上有一个项目列表,能够通过文本框过滤(类似于MVC教程)。我有一个按钮,我想清除 TextBox中的文本并调用控制器函数,然后将项目列表恢复到其初始的,未过滤的状态。
我遇到的问题是双重的:我清除TextBox文本的jQuery代码不会清除搜索词的TextBox,而我的jQuery代码显式传入空字符串为我的控制器的参数不会传入该参数。
例如:
我怀疑这完全是由于TextBox没有被清除,但老实说我不知道。
Index.cshtml
@{
ViewBag.Title = "Index";
var modelitem = new MyThing();
}
@model IEnumerable<MyModel>
<script type="text/javascript">
function fart() {
$('#reset').click(function() {
$('#filterTerm').val('');
$.get("SelectionSummary/Index", { filterTerm: '' })
});
}
</script>
@using (Html.BeginForm())
{
<div class="input-group center-block">
<h3 class="text-center">Selections</h3>
@Html.AntiForgeryToken()
@Html.TextBox("filterTerm", null, new
{
@id = "filterTerm",
@class = "form-control col-md-offset-2",
@placeholder = "Filter"
})
<input id="reset" class="btn btn-info" type="submit" value="reset" onclick="fart"/>
</div>
}
<br />
@if (Model != null && Model.Any())
{
<div class="panel panel-default col-md-offset-2" style="width:62%">
<div class="panel-body">
<br />
<table class="table table-striped text-center">
<tr>
<th>
@Html.DisplayFor(m => modelitem.NameLabel)
</th>
<th>
@Html.DisplayFor(m => modelitem.Thing)
</th>
</tr>
@foreach (var thing in Model.OrderBy(g => g.Name))
{
<tr>
<th>
@Html.ActionLink(thing.Name, "Detail", new { selectionSearchTerm = thing.Name })
</th>
<th>
@Html.DisplayFor(m => thing.Other.Name)
</th>
</tr>
}
</table>
</div>
</div>
}
else
{
<h4 class="text-center">No results</h4>
}
SelectionSummaryController.cs
public ActionResult Index(string filterTerm = "")
{
var stuff= m_repo.GetAllStuff();
if (stuff.IsNullOrEmpty()) // extension method
{
return View();
}
if (filterTerm.HasValue()) // extension method
{
stuff= stuff.Where(t => t.Name.Contains(filterTerm));
}
return View(stuff.ToList());
}
答案 0 :(得分:0)
我相信您的问题在于使用HasValue.
我会改为:
public ActionResult Index(string filterTerm = "")
{
var stuff= m_repo.GetAllStuff();
if (stuff.IsNullOrEmpty())
{
return View();
}
if (!string.IsNullOrEmpty(filterTerm))
{
stuff= stuff.Where(t => t.Name.Contains(filterTerm));
}
return View(stuff.ToList());
}
此外,你的JavaScript没有意义。单击按钮时,为什么要在按钮上放置单击事件处理程序?试试这个。
<script type="text/javascript">
function fart() {
$('#filterTerm').val('');
$.get("SelectionSummary/Index", { filterTerm: '' })
}
</script>
话虽如此,我不确定你为什么甚至使用那个ajax get。你没有对数据做任何事情。