我有一個MVC應用程序將列出名稱。這些名稱位於實體框架數據庫中。計時器位於列表中的名字旁邊,當計時器結束時,該名稱將從列表和數據庫中刪除(直到沒有名字被留下)。應用程序首先顯示數據庫中的5個名稱。當第一個名字被刪除時,我很難過,如何將數據庫中的下一個名字追加到表中。MVC在刪除後追加數據庫記錄到表
例如:如果記錄1,2,3,4,5正在顯示並且記錄1被刪除,我需要記錄2,3,4,5,6來顯示。這是我現在的代碼。
Index.cshtml
@model IEnumerable<RangeTimer.Models.UserName>
@{
ViewBag.Title = "";
}
<div class="container"></div>
<div class="jumbotron">
<h2>Add Title</h2>
<p>
@Html.ActionLink("Add Name to list for range time", "AddUserName", new{ target = "_blank" })
</p>
<hr />
<table class="table" id="NameList">
<tr>
<th>
@Html.DisplayNameFor(model => model.FullName)
</th>
<th>
Time Remaining
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td id="FullName">
@Html.DisplayFor(modelItem => item.FullName)
</td>
@Html.HiddenFor((modelItem => item.Id))
<td>
<span id="timer"></span>
</td>
</tr>
}
</table>
</div>
<br/>
<script language="javascript" type="text/javascript">
$(document).ready(function() {
startTimer();
function startTimer() {
$('#timer').countdown({
layout: '{mnn} : {snn}', timeSeparator: ':', until: 15, onTick: TimerColorChange, onExpiry: restartTimer
});
}
function restartTimer() {
var Id = $("#item_Id").val();
$('#timer').countdown('destroy');
//we delete the table's Info
$('#FullName').parent().remove();
// deleting records from entity framweork database;
$.ajax({
url: '@Url.Action("Delete", "UserNames")',
type: "POST",
data: ({ Id: Id }),
dataType: "json",
cache: false,
async: true,
success: function (data) {
//repopulate list
$.each(data, function (index, item) {
row += "<tr><td>" + item.FullName + "</td></tr>";
});
alert(FullName).val();
$('#NameList').html(row);
$('#NameList > tbody:last-child').append("<tr><td>"+ $('#FullName').val()+"</td> </tr>");
// $('#NameList').html(data);
}
});
startTimer();
}
function TimerColorChange(periods) {
var seconds = $.countdown.periodsToSeconds(periods);
if (seconds <= 3) {
$(this).css("color", "red");
} else {
$(this).css("color", "black");
}
}
});
</script>
控制器:
public class UserNamesController : Controller
{
private UserNameDBContext db = new UserNameDBContext();
// GET: UserNames
public ActionResult Index()
{
return View(db.UserNames.Take(5).ToList());
}
// GET: AddEmployee
public ActionResult AddUserName()
{
return View();
}
//Post method to add details
[HttpPost]
public ActionResult AddUserName(UserName obj)
{
AddDetails(obj);
TempData["Message"] = obj.FullName + " has been added to the list successfully.";
ModelState.Clear();
return View();
}
private void AddDetails(UserName obj)
{
db.Database.ExecuteSqlCommand("GetAddName @FullName", new SqlParameter("@FullName", obj.FullName));
}
[HttpPost]
public ActionResult Delete(int Id)
{
//try
//{
// TODO: Add delete logic here
UserName userName = db.UserNames.Find(Id);
db.UserNames.Remove(userName);
db.SaveChanges();
//return View(db.UserNames.Take(5).ToList());
return Json(new { success = true });
}
catch
{
return Json(new { success = false });
}
}
OK以及如何刷新頁面後更改數據庫都將依賴於服務器和客戶端通信。例如,計時器是JavaScript計時器還是C#計時器? –
計時器代碼位於index.cshtml文件的腳本標記中。它正在使用jquery – user2448412
至少有兩種方式可以刷新數據;最簡單但並非最優雅的方式是在時間結束時簡單地重定向回到同一頁面,但這會導致整個頁面重新加載,而不是一個非常好的UX。另一種方法是使用jQuery從DOM中刪除