ASP.NET MVC - 将搜索结果构建为Div

时间:2009-11-05 03:30:36

标签: asp.net-mvc json asp.net-ajax

我是ASP.NET MVC的新手,但我需要搜索与所选类别匹配的文章。这个查询的结果可能需要用DHTML-jquery写入“搜索结果”div覆盖。

所以,我需要Action的结果,但不需要渲染视图。我想我可以使用Json,然后以某种方式迭代结果记录。

或者使用RenderPartial更容易......但是我如何在这个DHTML场景中使用它?

感谢。

2 个答案:

答案 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包含搜索字符串。

有意义吗?