0

基本上,我有一个带有 id(主键)和名称的 MySQL 表。当用户在网络表单上的“ID”文本框中输入一个数字时,我想根据输入的 id 用名称更新另一个文本框。最好的方法是什么?

我目前正在做的事情感觉很愚蠢,但它确实有效。当我的页面加载时,我将 id 和 name 拉到一个DataTable对象中。然后,当文本框更改(TextChanged event)时,我回发到服务器,然后搜索我的数据表并更改名称文本框的值。

它可以工作,但由于回邮,它有点慢。我有一种感觉,这可以通过 javascript 来让表单感觉更灵敏?但我什至不确定要谷歌什么。有小费吗?

4

2 回答 2

0

您应该为此使用 JavaScript。无需回发到服务器。

<script src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.9.1.min.js"></script>
<script>
$(document).ready(function ()
    {
        $('input[name="txtid"]').on('change keyup',function()
        {
            $('input[name="txtnotifications"]').val
            (
                $('input[name="txtid"]').val()
            );
        });
});
</script>
</head>

<body>
<form action="/">
  <input name="txtid" type="text" />
  <br />
  <input name="txtnotifications" type="text" />
</form>

此外,用户输入 id 似乎很奇怪。这通常是数据库管理的字段,用户无法创建/更新它。

于 2013-11-10T14:50:42.267 回答
0

如果酒店表很小,则拉出所有记录并呈现为 javascript 数组对象。

<script src="Scripts/jquery-1.9.1.min.js"></script>

<input id="txtID" type="text" runat="server" />
<input id="txtName" type="text" runat="server" />

<script type="text/javascript">
    $(function () {
        $('#<%= txtID.ClientID%>').on('change keyup', function () {
            var result = $.grep(hotels, function (e) { return e.id == $('#<%= txtID.ClientID%>').val(); });
            var output;

            if (result.length == 0) {
                // not found
                output = 'Hotel not found!!!';
            } else if (result.length == 1) {
                // access the foo property using result[0].foo
                output = result[0].name;
            } else {
                // multiple items found
                output = 'Multiple hotels found!!!';
            }

            $('#<%= txtName.ClientID%>').val(output);
        });
    });
</script>

在后面的代码中,您需要做的是将记录呈现为序列化的 JSON 字符串:

Private Sub rendertHotelList()
    Dim dt As DataTable = ... ' read hotel data from db into datatable

    Dim hotels = From row As DataRow In dt.AsEnumerable
                 Select id = CStr(row!EmployeeID), name = row!LastName

    Dim jss As New Script.Serialization.JavaScriptSerializer
    Dim s As String = jss.Serialize(hotels)

    ClientScript.RegisterClientScriptBlock(GetType(Page), "hotel_array", "var hotels = " & s, True)

End Sub

这样,当用户输入 id 值时,不需要回发到服务器。

但是,如果表包含大量记录并且您需要保持页面大小尽可能小,请使用 ajax 请求来检索名称。

于 2013-11-11T07:43:35.450 回答