使用ajax将数据从控制器传递到视图

时间:2016-03-21 15:00:58

标签: jquery asp.net ajax asp.net-mvc razor

您好我从数据库中选择数据,我希望这些数据从我的控制器传递到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;
                    }


                }

2 个答案:

答案 0 :(得分:2)

我认为问题来自url属性。其他一切似乎都是正确的。我推荐你的更好的方法是使用Ajax html helper。我向你展示了两个例子--ajax helper和jquery。

Ajax帮助方法 - &gt;我更喜欢它,因为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",

我希望这能解决你的问题。 最好的问候

答案 1 :(得分:1)

我再次阅读了你的问题,我发现你的观念是错误的。我会在接下来的几行中解释一下我的意思。所以..

没有通过ajax从控制器传递数据的事情。您只能将带有ajax的数据从View传递到Controller。它用于SPA功能的情况。如果要加载数据并在视图中显示它,则应在MVC中使用视图模型并将其直接加载到视图中。

我已经用ajax为你做了一个工作实例,我将向你解释。首先,你没有调用你的功能。

在这种情况下,我做了一个简单的例子来向您展示这个想法是什么。

这是控制器

    [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将您在文本框中键入的值传递到控制器中