这可能是一个简单的问题,但我是MVC3的jQuery新手。我有一个MVC3应用程序,其中索引操作列出了与作者的一些文章。用户可以通过(以及其他参数)作者名称来过滤列表,因此我有一个使用jQueryUI自动完成的输入元素,让他们输入一些字母并选择所需的作者。当发生这种情况时,我的JS代码将其ID存储到隐藏元素中并发布表单;然后,ID通过模型绑定器传递给表示我所有过滤器的对象。
过滤器对象如下:
public sealed class PaperFilter
{
public int? AuthorId { get; set; }
// ... other params here
}
控制器操作接收页码和排序参数(视图使用MvcContrib网格)和此过滤器。然后它创建一个视图模型,包括论文列表和表示过滤器属性的许多属性,并将其传递回视图:
public ViewResult Index(int? page, GridSortOptions sort, PaperFilter filter)
{
var papers = _repository.GetPapers(filter);
if (sort.Column != null)
papers = papers.OrderBy(sort.Column, sort.Direction);
ViewBag.Sort = sort;
PaperIndexModel model = new PaperIndexModel(filter)
{ Papers = papers.AsPagination(page ?? 1, 10) };
if (filter.AuthorId.HasValue)
{
Author author = _repository.GetAuthor((int)filter.AuthorId);
model.AuthorName = author.FirstName + " " + author.LastName;
}
return View(model);
}
返回的模型包含论文列表以及过滤器属性的副本。
视图表格相关代码是:
...
@Html.TextBoxFor(m => m.AuthorName)
@Html.HiddenFor(m => m.AuthorId)
...
及其JS代码:
<script type="text/javascript">
$(function () {
$("#AuthorName").autocomplete({
source: function (request, response) {
$.ajax({
url: "/Author/FindAuthor", type: "POST", dataType: "json",
data: { LastName: request.term },
success: function (data) {
response($.map(data, function (item) {
return { label: item.FirstName + ' ' + item.LastName, value: item.LastName, id: item.Id };
}));
}
});
},
select: function (event, ui) {
$("#AuthorName").val(ui.item.value);
$("#AuthorId").val(ui.item.id);
$(this).closest("form").submit();
}
});
});
</script>
这很好用,无论如何我想让我的用户通过简单地清除输入框(AuthorName)并按Enter键来重置作者过滤器;但要做到这一点,我需要重置AuthorId值,即在发布表单之前执行类似 $(“#AuthorId”)。val(“”)的操作。我尝试在按键上执行此操作但在帖子发生之前似乎没有触发,因为我的操作仍会获得填充了AuthorId的过滤器。有人可以提出解决方案吗?
答案 0 :(得分:0)
在你的.ajax()调用之前检查它。如果长度为0,则不必使用.ajax,只返回。