2016-03-21 89 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 helper。我向你展示两个例子 - ajax helper和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属性

你应该把它作为网址是这样的:

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

我希望这能解决您的问题。 致以问候

+0

PS:您也可以使用缩短语法 - $ .post(“ajax/test.html”,function(data){ $(“.result “).html(data); }); –

+0

我改变了我的网址为url:“/ Home/Foo”但它仍然不工作,Ajax html helper我不知道如何在我的情况下使用 –

1

我再次读过您的问题,我发现您的概念错误。我将在接下来的几行中解释我的意思。所以..

没有这样的事情,通过ajax从控制器传递数据。您只能将视图中的ajax数据传递给控制器​​。它用于SPA功能的情况下。如果你想加载数据并在视图中显示它,你应该在MVC中使用视图模型并直接在视图中加载它。

我已经让你成为一个工作的例子,我会解释给你。第一件事是你没有调用你的函数。

在这种情况下,我做了一个简单的例子,告诉你这个想法是什么。

这是控制器

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

这些都是HTML输入

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

这是你的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。但我不知道如何去做。请让任何想法知道如何去做? –

相关问题