在asp.net mvc4中搜索

本文关键字:搜索 mvc4 net asp | 更新日期: 2023-09-27 18:29:06

我是asp.net MVC4的新手。为了从列表中搜索姓名,我在MVC4中尝试了一个搜索过滤器。

这是控制器-

public ActionResult SearchUser(string Email, int? UserId) {
            var system = from u in db.SystemUsers
                         select u;
            if (!String.IsNullOrEmpty(Email)) {
                system = system.Where(c => c.Email.Contains(Email));
            }

            return View(system.Where(x=>x.Email==Email));
        }

查看-

<input type="text" id="search-User" />
    <button  id="text-email">search</button>

Ajax处理-

 <script type="text/javascript">
                $(document).ready(function () {
                    $('#text-email').click(function () {
                        var areavalue = $('#search-User').val();
                        alert(areavalue);
                        $.ajax({
                            url: '/Allusers/SearchUser/?Email=' + areavalue,
                            type: 'get',
                            datatype: 'json'
                        });
                    });
                });
</script>

ViewModel-

public class UserModel
    {
        [Required]
        public string Email { get; set; }
        public int UserId { get; set; }
    }

我有很多用户作为一个列表,所以我想从列表中筛选出任何用户。为此,我使用input元素来获得列表中的确切名称。因此,这个名称被传递给控制器以找到完全匹配的名称。

它显示了我通过ajax处理传递的值,但没有显示过滤后的结果。

如何在Asp.net MVC4中执行搜索?

在asp.net mvc4中搜索

我会使用更好的Load()函数来处理这种情况:

 <script>
   $(function () {
   $('#text-email').click(function () {
       var areavalue = $('#search-User').val();
       $(".YourDivForResults").Load('/Allusers/SearchUser/?Email=' + areavalue)                       
                    });
                });
</script>

并且,作为一个建议,修改你的ActionResult如下:

system = system.Where(c => c.Email.ToUpper().Trim().Contains(Email.ToUpper().Trim()));

这样可以避免空格和大写字母或小写字母的问题。

您的ajax函数正在将数据发送到服务器,但它不会对结果做任何操作。为了使用结果,您应该在正在调用的jQuery.ajax方法中使用done promise方法。它看起来像这样:

$.ajax({
  url: '/Allusers/SearchUser/?Email=' + areavalue,
  type: 'get',
  datatype: 'json'
}).done(
        function(data, textStatus, jqXHR) {
          var object = jQuery.parseJSON(data);
          // LOGIC FOR UPDATING UI WITH RESULTS GOES HERE
        }
);

您也可以使用Success回调选项(而不是done)。但关键是要为如何处理Action返回的数据提供逻辑。

此外,如果您打算使用ViewModel返回结果,则可能需要从Linq查询中返回UserModel对象。

如果您希望操作返回JSON,则不应返回View。相反,请尝试返回JSON(data)。(请参阅此处了解更多信息)。

您需要对您的操作进行小的更改,如

public ActionResult SearchUser(string Email, int? UserId) {
            var system = from u in db.SystemUsers
                         select u;
            if (!String.IsNullOrEmpty(Email)) {
                system = system.Where(c => c.Email.Contains(Email));
            }

            return Json(system.Where(x=>x.Email==Email),JsonRequestBehavior.AllowGet);
        }

在您的ajax调用中

 $(document).ready(function () {
                        $('#text-email').click(function () {
                            var areavalue = $('#search-User').val();
                            alert(areavalue);
                            $.ajax({
                                url: '/Allusers/SearchUser/?Email=' + areavalue,
                                type: 'get',
                                datatype: 'json',
    success:function(data){JSON.stringify(data);}
                            });
                        });

                });

这样您将获得json格式的搜索结果。你可以利用它。希望它能帮助