Класс контроллера MVC для автоматического добавления новых данных в модель нажатием кнопки пользователя

1

Я пытаюсь написать класс в asp.NET MVC 5, который автоматически добавит данные в мою модель, когда пользователь нажимает кнопку на представлении. В частности, данные являются отметкой даты в одном столбце базы данных и отметкой времени в другом столбце. Так, например, база данных выглядит примерно так:

Day TimeIn TimeOut

У меня есть две кнопки: ClockIn и ClockOut. первая должна быть в состоянии вставить в столбцы 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>

Я не совсем уверен, где моя проблема, но я считаю, что это должно быть нечто, что

  • 0
    В чем тут вопрос.
  • 0
    Я пытаюсь создать кнопку, которая будет автоматически добавлять день и время в базу данных без какого-либо другого ввода от пользователя. У меня вопрос, как я могу сделать это с контроллером? C # может быть легко использован для определения дня и времени, когда мне не хватает только кода для вставки этой информации в модель базы данных.
Теги:
asp.net-mvc

1 ответ

2
Лучший ответ

Проблема заключается в способе выполнения 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();
  • 0
    Поэтому первая часть ответа с использованием SqlParameter у меня не сработала. Есть ли sqlParameter в конкретной библиотеке?
  • 0
    Да, он доступен в пространстве имен System.Data.SqlClient. Вы пробовали вторую часть?
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню