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>

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

私はリストとして多くのユーザーを持っているので、リストからユーザーを除外したかったのです。このために、入力要素を使用して、リストにある正確な名前を取得しています。したがって、この名前はコントローラーに渡され、完全に一致するものを見つけます。

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 に答える