【问题标题】:Pass data from controller to view using ajax使用ajax将数据从控制器传递到视图
【发布时间】:2016-07-08 04:02:37
【问题描述】:

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


                }

【问题讨论】:

  • 检查值是否正确。保持警报 alert(person) 和 alert(person.email_uzivatele) 并查看值是否正确出现并且只是绑定问题
  • 我添加了警报,但没有发生任何事情。说真的,我做错了什么?
  • 如果您的SelectByEmail 函数返回一个列表.. 那么您的ajax 成功应该使用索引来获取值$('#email').val(person[0].email_uzivatele);
  • 即使我在我的 ajax 中更改了你建议的内容,仍然无法正常工作
  • 你仍然没有告诉我们到底是什么不工作..控制器操作是否被击中..人在返回之前是否有任何记录.. email_uzivatele 是否包含值?

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


【解决方案1】:

我认为问题出在 url 属性上。其他一切似乎都是正确的。我会向您推荐的更好的方法是使用 Ajax html 助手。我向你展示了两个例子 - 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 属性

你应该像这样将它作为 url 传递:

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

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

【讨论】:

  • PS:你也可以使用缩短语法 - $.post( "ajax/test.html", function( data ) { $( ".result" ).html( data ); }) ;
  • 我将 url 更改为 url: "/Home/Foo" 但它仍然无法正常工作,而且我不知道如何在我的情况下使用 Ajax html 助手
【解决方案2】:

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

没有通过 ajax 从控制器传递数据这样的事情。您只能使用 ajax 将数据从视图传递到控制器。它用于 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 将您在文本框中输入的值传递给控制器​​

【讨论】:

猜你喜欢
  • 2020-06-08
  • 2015-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-11
  • 2019-06-02
  • 1970-01-01
相关资源
最近更新 更多