【发布时间】:2017-03-08 15:29:16
【问题描述】:
我有一个充满输入文本的表格,它们看起来像这样:
<input type='text' value='{Value}' id='{Model.ID}' class='ChckNumber' />
类名因列不同而不同,Model.ID 因行而异,列因列和行而异。
当输入文本变得没有焦点时,我调用一个 api 来使用用户输入的内容更新值,如下所示:
$("input[type=text]").on("focusout", function () {
var id = $(this).attr("id");
var column = $(this).attr("class");
var value = $(this).val();
if (typeof id !== "undefined" && typeof column !== "undefined" && typeof value !== "undefined") {
$.ajax({
url: "/api/Action/UpdateTable?id=" + id + "&column=" + column + "&value=" + value,
type: "GET",
error: function (request, status, error) {
InsertLogEntry(request.responseText + " From API Call /api/Action/UpdateTable");
},
success: function (data) {
}
});
}
});
这里是它的调用 API 控制器:
[HttpGet]
public void UpdateTable(int id, string column, string value)
{
MethodClass method = new MethodClass();
if(column != null && column != "" && id != 0)
{
method.UpdateTable(id, column, value);
}
}
这是我正在调用的方法:
public void UpdateTable(int id, string column, string value)
{
connection = new SqlConnection(connectionString);
if(column.Contains("Date"))
{
DateTime dt = Convert.ToDateTime(value);
command = new SqlCommand("UPDATE tblCheckTrackerRegister SET " + column + " = @Date WHERE ID = " + id);
command.Parameters.Add("@Date", System.Data.SqlDbType.DateTime);
command.Parameters["@Date"].Value = dt.Equals(DateTime.MinValue) ? (object)DBNull.Value : dt;
}
else
{
int result;
if (int.TryParse(value, out result))
{
command = new SqlCommand("UPDATE table SET " + column + " = " + value + " WHERE ID = " + id);
}
else
{
command = new SqlCommand("UPDATE table SET " + column + " = '" + value + "' WHERE ID = " + id);
}
}
command.Connection = connection;
connection.Open();
command.ExecuteNonQuery();
connection.Close();
}
这很好用,但我希望改进它。老实说,我相信必须有更好的方法来解决这个问题,因为我的代码对我来说似乎很乱,我的问题是,谁能建议另一种方法来完成我想要完成的事情?
【问题讨论】:
-
查看上面的代码 - 当您的值包含十进制值(如 (value = 10.53))时,它似乎会出现问题,然后它会转到 else 部分并将其视为字符串
-
改善是什么意思?? Javascript代码改进还是asp.net代码改进?
-
嗯嗯......!您是否有理由不能编写/使用标准更新程序来更新所有值,无论它们是否更改,这就是我们 99.99% 的人这样做的方式。并且没有性能开销(可以忽略不计),并且您不必维护此类容易出错的代码。