使用ajax向表格和页面添加条目

Posted

技术标签:

【中文标题】使用ajax向表格和页面添加条目【英文标题】:Adding an entry to the table and page using ajax 【发布时间】:2019-05-23 00:04:16 【问题描述】:

我学习 javascript。得到ajax请求。在 mvc 中一切正常。我决定尝试使用网络表单。试图在页面上发布新条目,请告诉我我做错了什么。这是我的代码。页面代码作为主视图:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Tables.aspx.cs" Inherits="WebApplication1.Tables" %>

<!DOCTYPE html>
<script src="../../Scripts/jquery-1.8.0.min.js"></script>
<script src="../../Scripts/jquery.unobtrusive-ajax.js"></script>
<html lang="en">
<head> 
    <meta charset="utf-8"> 
    <meta http-equiv="X-UA-Compatible" content="IE=edge"> 
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" >
</head>

<body>
    <div>
        <table id="tab" class="table table-bordered">
            <thead>
                <tr>
                    <th>Name</th>
                    <th>Author</th>
                    <th>Price</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>1408</td>
                    <td>Stiven King</td>
                    <td>500</td>
                </tr>
            </tbody>
        </table>
    </div>

    <form id="form1" runat="server">
        <asp:TextBox ID="txbName" runat="server"></asp:TextBox>
        <asp:TextBox ID="txbAuthor" runat="server"></asp:TextBox>
        <asp:TextBox ID="txbPrice" runat="server"></asp:TextBox>
        <input id="btnAdd" type="submit" value="Добавить" />
    </form>
</body>
</html>


<script>
    $('#btnAdd').on('click', function () 
        $.ajax(
            type: "POST",
            url: "Tables.aspx/AddBook",
            data: JSON.stringify(
                "Name": $('#txbName').val(),
                "Author": $('#txbAuthor').val(),
                "Price": $('#txbPrice').val()
            ),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (MyDT) 
                $('#tab tbody').append(MyDT);
            ,
            error: function (xhr) 
                alert(xhr.statusCode)
            
        );
    );
</script>

Web方法代码,控制器:

[WebMethod]
        public static string AddBook(string Name, string Author, int Price)
        
            db = new Context();
            string html = "";
            Book book = new Book()  Name = Name, Author = Author, Price = Price ;
            db.Books.Add(book);
            db.SaveChanges();

            html = GetHTMLRow(book);
            return html;
        

还有另一种获取 html 代码以进一步向页面添加条目的方法,类似于条目将在其上的局部视图:

public static string GetHTMLRow(Book book)
        

            string htmlRow = $"<tr><td>book.Name</td><td>book.Author</td><td>book.Price</td></tr>";
            return htmlRow;
        

我的代码完全可以运行,但由于某种原因页面重新启动。但是ajax请求不应该在不接触页面的情况下异步工作吗?在 MVC 中一切正常。那为什么不呢?有什么问题?

【问题讨论】:

【参考方案1】:

当您单击按钮时,它会提交表单(因为类型设置为“提交”)。改成“按钮”

<input id="btnAdd" type="button" value="Добавить" />

【讨论】:

潘杜朗,谢谢。表单不再重新加载,但由于某种原因,向页面添加一行不起作用。 success: function (MyDT) $('#tab tbody').append(MyDT);,但是如果我自己在客户端上执行此代码,则会添加一行,为什么会这样? 做一个console.log(MyDT) 看看你是否得到了预期的结果。我在您的$html_row 字符串中看到$ 登录。所以删除它并尝试string htmlRow = "&lt;tr&gt;&lt;td&gt;book.Name&lt;/td&gt;&lt;td&gt;book.Author&lt;/td&gt;&lt;td&gt;book.Price&lt;/td&gt;&lt;/tr&gt;";可能是这个原因。 Pandurang, MyDT contatin d: "&lt;tr&gt;&lt;td&gt;sdfsf&lt;/td&gt;&lt;td&gt;dsfsdf&lt;/td&gt;&lt;td&gt;23424&lt;/td&gt;&lt;/tr&gt;"也许是因为这个?你看到的是 c# 中字符串的插值。 我试着这样做,但结果是一样的。 string htmlRow = "&lt;tr&gt;&lt;td&gt;" + book.Name + "&lt;/td&gt;&lt;td&gt;" + book.Author + "&lt;/td&gt;&lt;td&gt;" + book.Price + "&lt;/td&gt;&lt;/tr&gt;"; 我有一种感觉,其实是MyDT中除了html代码之外,还有一个d:

以上是关于使用ajax向表格和页面添加条目的主要内容,如果未能解决你的问题,请参考以下文章

使用 jQuery ajax 和 PHP 复制到 mySQL 的条目

随笔:ajax传递数组,layui父子页面传值,下来菜单赋值,父页面数据获取,表格数据替换为字符串

我正在尝试在 wordpress 中学习 ajax 以删除表格条目,但对放置感到困惑

Symfony 表单和 Ajax

向页面或数据库页面添加提醒

在 Rails 中使用嵌套表单 - 如何使显示页面根据用户想要的呈现数量以表格格式显示每个新条目?