mvc控制器类通过用户点击按钮自动向模型中添加新数据

本文关键字:添加 模型 新数据 数据 控制器 用户 按钮 mvc | 更新日期: 2023-09-27 18:28:50

我正在尝试用asp编写一个类。NET MVC 5,当用户单击视图上的按钮时,它会自动将数据添加到我的模型中。具体来说,数据是数据库的一列中的日期戳和另一列的时间戳。例如,数据库看起来很像这个

Day TimeIn TimeOut

我有两个按钮,"打卡"answers"打卡"。第一个需要能够插入Day和TimeIn列,而ClockOut将根据数据库检查当前日期并添加用户的当前时钟。这是我迄今为止在控制器中拥有的类

// Post: Amember1/ClockInOut/ClockIn
    [HttpPost, ActionName("ClockIn")]
    public ActionResult ClockInConfirm()
    {
        string today = DateTime.Now.ToShortDateString();
        db.TimeClock.SqlQuery("INSERT INTO TimeClock(Day) VALUES [today]");
        db.SaveChanges();
        return RedirectToAction("Index");            
    }

这是的视图

    @model IEnumerable<AteamR2.Models.Amember1>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
    @Html.ActionLink("Create New", "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Day)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.TimeIn)
        </th>
        <th>
            @Html.DisplayNameFor(model => model.TimeOut)
        </th>
        <th></th>
    </tr>
@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.Day)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.TimeIn)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.TimeOut)
        </td>
        <td>
           <div class="ClockIn">
               <input type="submit" value="ClockIn" class="buttonIn" />
           </div>
           <div class="ClockOut">
               <input type="submit" value="ClockOut" class="buttonIn" />
           </div>
            @Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
            @Html.ActionLink("Details", "Details", new { id=item.ID }) |
            @Html.ActionLink("Delete", "Delete", new { id=item.ID })
        </td>
    </tr>
}
}
</table>

我真的不确定我的问题在哪里,但我相信这应该是

mvc控制器类通过用户点击按钮自动向模型中添加新数据

问题在于运行sql查询的方式。

最佳实践是使用SqlParameter:

string day = DateTime.Now.ToShortDateString();
string time = DateTime.Now.ToShortTimeString();
string test = "insert into timeclock(day, time) values (@p1, @p2)";
List<SqlParameter> parameters = new List<SqlParameter>();
parameters.Add(new SqlParameter("@p1", day));
parameters.Add(new SqlParameter("@p2", time));
db.Database.ExecuteSqlCommand(test, parameters.ToArray());

更好的方法是让EF为您构造SQL查询:

db.TimeClock.Add(new TimeClock() { Day = day, Time = time });
db.SaveChanges();