【问题标题】:ASP.NET MVC - Build Search Results into a DivASP.NET MVC - 将搜索结果构建到 Div
【发布时间】:2010-12-13 06:50:24
【问题描述】:

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

所以,我需要一个动作的结果,而不是渲染一个视图。我在想我可以使用 Json,然后以某种方式遍历结果记录。

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

谢谢。

【问题讨论】:

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


    【解决方案1】:

    我喜欢 Steve Sanderson 在他的 ASP.NET MVC 书中描述的方式。它不适用于 JSON,但返回一个部分。这使得同时拥有 Ajax 和非 Ajax 版本变得更加容易。

    控制器根据请求的类型返回视图或部分:

    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 sn-p 在 Javascript 可用时启动并通过 Ajax 提交请求

    <script language="javascript" >
      $(function() {
        $("#articleSearch").submit(function() {
            $.post($(this).attr("action"), $(this).serialize(), function(modelResponse) {
                ("#articleResultContainer").html(modelResponse);
    
            });
            return false;
        });
      });
    </script>
    

    【讨论】:

      【解决方案2】:

      嗯,听起来你正在尝试做一个过滤器?

      如果是这种情况,我认为尝试在您的 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 包含搜索字符串。

      有意义吗?

      【讨论】:

      • 是的,我将使用 linq 来查询 SQL Server 数据库……效果类似于 (x=>x.Category == categoryVal)。但是,如果我不重新加载当前页面,我可以使用部分视图吗?我停留在同一页面上,并使用 ajax 获取结果并将其绘制到结果 div 中。
      • 是的,你可以。局部视图可以绑定到一个类或 List,这是本例中的首选方法。然后在您的控制器中,您将返回 PartialClass("PartialClassName", List);就您需要关心的而言,它的作用是一堆 HTML。在您成功调用 jQuery 后,您将使用新返回的 html 替换绑定 div 的 html 内容。任务完成!希望这是有道理的。
      • 抱歉,应该是“边界 div 的 html 内容”。所以一个 div 包含包含您的内容的所有其余 div。给边界 div 一个类名并使用 $('.YourBoundingDivClassName').html(NEWHTML);
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-27
      • 1970-01-01
      相关资源
      最近更新 更多