在asp.net中搜索mvc4

时间:2013-08-25 12:34:19

标签: c# asp.net ajax asp.net-mvc razor

我是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>

视图模型 -

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

        public int UserId { get; set; }
    }

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

显示我通过ajax处理但未显示过滤结果的值。

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

3 个答案:

答案 0 :(得分:1)

您的ajax函数正在将数据发送到服务器,但它没有对结果执行任何操作。要使用结果,您应该使用您调用的jQuery .ajax method中的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。相反,请尝试returnins JSON(data)。 (有关详细信息,请参阅here。)

答案 1 :(得分:1)

我会使用更好的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()));

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

答案 2 :(得分:0)

你需要对你的动作做一些小改动,比如

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格式的搜索结果。你可以利用它。希望它有所帮助