.NET MVC Предотвращение обновления при создании новой записи.

У меня есть приложение MVC, которое будет перечислять имена. Имена находятся в базе данных Entity Framework. Таймер находится рядом с первым именем в списке, и когда таймер заканчивается, имя удаляется из списка, и таймер начинается снова для следующей записи (это продолжается до тех пор, пока не останется ни одного имени).

У меня также есть возможность добавлять имена в список. Прямо сейчас, когда пользователь добавляет имя в список, нажав на ссылку "Создать", имя добавляется, но оно перезапускает текущий таймер, который ведет обратный отсчет. Мне нужно добавить имя без обновления таймера. Это возможно??

Посмотреть:

@model IEnumerable<RangeTimer.Models.UserName>

@{
    ViewBag.Title = "ABC";
}
<div class="jumbotron">

<p>
        @Html.ActionLink("Add Name to list for range time", "Create")
    </p>

<table class="table">
    <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>
            <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() {          
        $('#timer').countdown('destroy');

        var currentName = $('#FullName').Text;

        //we delete the table's Info
        var deleteRecord = $('#FullName').parent().remove();

        // deleteRecord.deleteRow(); //commented out since this also removes my timer

        var action = '@Url.Action("DeleteName","Controller")';
        $.get(action + "?name=" + currentName).done
            (function (result) {
                if (result) {
                    //  your user is deleted
                }
            })
        startTimer();
    }

    function TimerColorChange(periods) {
        var seconds = $.countdown.periodsToSeconds(periods);
        if (seconds <= 3) {
            $(this).css("color", "red");
        } else {
            $(this).css("color", "black");
        }
    }
});


</script>  

контроллер

  // GET: UserNames
    public ActionResult Index()
    {
        return View(db.UserNames.ToList());
    }

    // GET: UserNames/Details/5
    public ActionResult Details(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        UserName userName = db.UserNames.Find(id);
        if (userName == null)
        {
            return HttpNotFound();
        }
        return View(userName);
    }

    // GET: UserNames/Create
    public ActionResult Create()
    {
        return View();
    }

    // POST: UserNames/Create
    // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
    // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "Id,FullName")] UserName userName)
    {
        if (ModelState.IsValid)
        {
            db.UserNames.Add(userName);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        return View(userName);
    }

2 ответа

Если вы отправляете параметр времени в действие addname и должны добавить параметр перенаправления. И чем использовать viewbag.time.

Да, это возможно! С помощью магии Ajax и Javascript/jQuery вы можете вызывать свой контроллер при добавлении имени через ajax, чтобы отправить имя, вернуть добавленное имя и добавить его на страницу, используя Javascript или jQuery. К сожалению, это немного сложно, и я не могу написать это для вас в данный момент. Однако попробуйте некоторые из этих ссылок.

https://msdn.microsoft.com/en-us/library/dd381533(v=vs.100).aspx

Выполнение простого вызова Ajax для контроллера в asp.net mvc

Удачи!

РЕДАКТИРОВАТЬ: Вот небольшой пример функции JavaScript, используя jQuery/ajax

function AddName(name) {
    $.ajax({
        url: action, // Make it whatever your controller is
        data: { UserName: name }, // or whatever object you need
        type: "POST",
        dataType: "html",
        success: function (result, status, blah) {

            if (result) {
                AppendRow(result, target); // Create function to add to your name list
            }
        },
        error: function (result) {
            AjaxFailed(result, result.status, result.error);
        }
    });
}
Другие вопросы по тегам