我是ASP.NET MVC的新手,但我需要搜索与所选类别匹配的文章。这个查询的结果可能需要用DHTML-jquery写入“搜索结果”div覆盖。
所以,我需要Action的结果,但不需要渲染视图。我想我可以使用Json,然后以某种方式迭代结果记录。
或者使用RenderPartial更容易......但是我如何在这个DHTML场景中使用它?
感谢。
答案 0 :(得分:1)
我喜欢Steve Sanderson在他的ASP.NET MVC书中描述的方式。它适用于JSON,但返回部分。这样可以更容易地同时拥有:Ajax和非Ajax版本。
cotroller根据请求的类型返回视图或部分:
public ActionResult GetArticles(string category)
{
...
if(Request.IsAjaxRequest())
{
return PartialView("ArticleListPartial",articleModel)
}
else
{
return View("ArticleListPage",articleModel)
}
}
默认情况下,搜索会使用非Ajax帖子提交from:
<form id="articleSearch" method ="post" action="/Article/GetArticles" >
...
<input type="submit" value="Get the articles!" />
<form>
然后有一个Jquery片段在Javascript可用时启动并通过Ajax提交请求
<script language="javascript" >
$(function() {
$("#articleSearch").submit(function() {
$.post($(this).attr("action"), $(this).serialize(), function(modelResponse) {
("#articleResultContainer").html(modelResponse);
});
return false;
});
});
</script>
答案 1 :(得分:0)
如果是这种情况,我认为尝试在你的HTML中进行搜索是一个坏主意。我认为更好的方法是使用jQuery回发,从您正在使用的任何数据库中获取结果集,并将其作为部分视图返回到视图。
当您搜索数据库时,您应该使用sql,Linq2Sql或您正在使用的任何内容来应用过滤器。
如果你仍然在寻找HTML,那么我会给每个相关的div一个类名称class =“DivSearchable”。然后在jQuery中你可以做类似的事情;
$('.DivSearchable").each(function() {
var text = $(this).val();
"Now test text for contents of your seach string"
if (BoolIfFound == true)
$(this).addClass("highlightClassName");
});
highlightClassName会将背景颜色设置为某样,以便您可以看到哪些div包含搜索字符串。
有意义吗?