1

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

阿贾克斯处理——

 <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; }
    }

我有很多用户作为列表,所以我想从列表中过滤掉任何用户。为此,我使用输入元素来获取列表中的确切名称。因此,此名称被传递给控制器​​以查找精确匹配。

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

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

4

3 回答 3

1

您的 ajax 函数正在将数据发送到服务器,但它没有对结果做任何事情。为了使用结果,您应该在您正在调用done的 jQuery .ajax 方法中使用 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 返回结果,则可能需要UserModel从 Linq 查询中返回对象。

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

于 2013-08-25T12:49:33.083 回答
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()));

这样,您将避免出现空格和大写或小写字母的问题。

于 2013-08-25T17:42:13.927 回答
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 格式的搜索结果。你可以利用它。希望能帮助到你

于 2013-08-25T12:49:29.787 回答