2016-03-21 8 views
-3

こんにちは私はデータベースからデータを選択し、これらのデータをコントローラから渡してajax経由で表示したいが動作していません。ajaxを使用してコントローラからデータを渡す

私を助けてください。ここで

は私のコントローラです:

ここ
[HttpGet] 
     public ActionResult Foo(string email_uzivatele) 
     { 
      var person = AdvertServiceLayer.Instance.SelectByEmail(email_uzivatele); 
      return Json(person, JsonRequestBehavior.AllowGet); 
     } 

私は、データベースから選択表示のメールをしたい:ここ

<input id="email" name="email_uzivatele" type="text" class="form-control input-md"> 

は私のAjaxの機能である:ここで

$(function() { 
      function getPerson(email_uzivatele) { 
       $.ajax({ 
        url: '@Url.Action("Foo", "Home")', 
        type: 'GET', 
        dataType: 'json', 

        cache: false, 
        data: { email_uzivatele: email_uzivatele }, 
        success: function (person) { 
         $('#email').val(person.email_uzivatele); 
        } 
       }); 
      } 
     }); 

機能ですデータベースからメールを選択する:

 public List<Advert> SelectByEmail(string email_uzivatele) 
       { 



        string queryString = "SELECT distinct email_uzivatele from 

    Reklama 
    where email_uzivatele like '%" + @email_uzivatele + "%'"; 
        // Create the Command and Parameter objects. 
        SqlCommand command = new SqlCommand(queryString, Connection); 

        command.Parameters.AddWithValue("@email_uzivatele", ""); 

        // Open the connection in a try/catch block. 
        // Create and execute the DataReader, writing the result 
        // set to the console window. 
        try 
        { 

         SqlDataReader reader = command.ExecuteReader(); 
         List<Advert> advert = new List<Advert>(); 
         while (reader.Read()) 
         { 

          Advert a = new Advert(); 
          a.email_uzivatele = reader[0].ToString(); 



          Console.WriteLine("email_uzivatele: " + " " + " 
" + a.email_uzivatele); 

          advert.Add(a); 
         } 

         reader.Close(); 
         return advert; 
        } 
        catch (Exception ex) 
        { 
         chyba.zapsat_do_souboru(ex.Message); 
         Console.OpenStandardOutput(); 
         Console.WriteLine(ex); 
         //zalogovat chybu 
         return null; 
        } 


       } 
+0

値が正しく設定されているかどうかを確認します。アラート(人物)とアラート(person.email_uzivatele)を保持して、値が正しく来ているかどうかを確認してください。バインドだけが問題です。 –

+0

アラートを追加しました。本当に何が間違っているのですか? –

+0

あなたの 'SelectByEmail'関数がリストを返すならば、あなたのajaxの成功はインデックスを使って値' $( '#email')を得なければなりません。val(person [0] .email_uzivatele); ' – JamieD77

答えて

2

私はこの問題がurlプロパティから来ていると思います。他のすべては正しいようです。 Ajax htmlヘルパーを使用することをお勧めします。私はあなたに、ajaxヘルパーとjqueryの両方の例を示します。

のAjaxヘルパーのアプローチ - MVCのビューは異なるファイルからいくつかの要求を行うJSせずにきれいなままですので、>私はそれを好む

ここ
@using (Ajax.BeginForm("AddToArticle", "Comments", null, new AjaxOptions 
                    { 
                     HttpMethod = "POST", 
                     InsertionMode = InsertionMode.InsertBefore, 
                     UpdateTargetId = "comments-list", 
                     OnSuccess = "acceptedComment", 
                     OnFailure = "rejectedComment" 
                    })) 
      { 
       @Html.AntiForgeryToken() 

       <input type="hidden" value="@Model.Id" name="toId"/> 
       <div class="row bottom-margin"> 
        <div class="col-md-12"> 
         <textarea id="comment-area" class="form-control" placeholder="Коментар" rows="5" name="content"></textarea> 
        </div> 
       </div> 
       <div> 
        <input type="submit" class="show-more cat-sports" title="Post comment" value="Добави"/> 
       </div> 
      } 

簡単にあなたのアクションに[ValidateAntiForgery]属性を置くことができ、それが確認されますあなたのビューに@ Html.AntiForgeryToken()がある場合、自動的にJSでは、偽造防止トークンも検証できます。 XSRF攻撃を防ぎ、セキュリティを強化します。ベストプラクティスによれば、すべてのPOST要求にはそれを維持する必要があります。

これはjqueryの例です。この場合、あなたの間違いは、あなたがこのようなURLとしてそれを渡す必要があり、urlプロパティ

です:

$.ajax({ 
    url: "/Home/Foo", 

私は、これはあなたの問題を解決することを願っています。 よろしくお願いします。

+0

PS:短縮形を使用することもできます。 $ .post( "ajax/test.html"、function(data){ $( ".result ").html(データ); }); –

+0

URLを "/ Home/Foo"に変更しましたが、まだ動作していません。私の場合、Ajax htmlヘルパーの使用方法はわかりません。 –

1

質問をもう一度読みましたが、あなたのコンセプトが間違っていることがわかりました。私は、次の数行で何を意味するのかを説明します。だから..

コントローラからのデータをajax経由で渡すことはありません。 ViewからControllerへのajaxだけでデータを渡すことができます。 SPA機能の場合に使用されます。データをロードしてビューに表示する場合は、MVCでビューモデルを使用し、ビューで直接ロードする必要があります。

私はあなたにajaxの実例を作りました。私はそれをあなたに説明します。まず、あなたの機能を呼び出さなかったということです。

この場合、私はあなたにそのアイデアを示す簡単な例を示しました。

<input id="email" name="email_uzivatele" type="text" class="form-control input-md"> 
<input id="submit-btn" type="submit" value="Sumbit" /> 

この

はコントローラ

[HttpGet] 
    public ActionResult Foo(string email_uzivatele) 
    { 
     return Json(email_uzivatele, JsonRequestBehavior.AllowGet); 
    } 

これらは、HTML入力であるこれは、あなたが入力された値を渡します。この場合、あなたのJS機能

$(function() { 

    $('#submit-btn').on('click', function() { 

     var email_uzivatele = $('#email').val(); 

     $.ajax({ 
      url: '/Home/Foo', 
      type: 'GET', 
      dataType: 'json', 
      cache: false, 
      data: { email_uzivatele: email_uzivatele }, 
      success: function (person) { 
       $('#email').val(person.email_uzivatele); 
      } 
     }); 
    }); 
}); 

です送信ボタンのajax経由であなたのテキストボックスにコントローラーへ

+0

ありがとうございます。私のデータベースを作成してから、これらのデータをajaxとGoogleのグラフ(https://google-developers.appspot.com/chart/interactive/docs/gallery/piechart#example)を使ってグラフに表示したいと考えています。しかし、私はそれをどうやって行うのか分かりません。どのようにそれを行うにはどのようなアイデアをお寄せですか? –

関連する問題