Кнопка не отключена и текстовое значение не изменяется после нажатия - PullRequest
0 голосов
/ 18 октября 2019

У меня в основном есть таблица, в которой есть кнопка «Применить в 1 клик» для доски объявлений. Я написал некоторый код функции ajax и jquery, чтобы каждый раз, когда пользователь нажимал на кнопку, кнопка отключалась и текст менялся. Прямо сейчас кнопка ajax сработала, и после щелчка в базе данных произошли изменения, но я не могу отключить эту кнопку и изменить текст. Пожалуйста, помогите.

Вот как выглядит кнопка ссылки Ajax:

  @if (User.Identity.IsAuthenticated)
{
 @Ajax.ActionLink("1-Click-Apply", "OneClickApply", new { id = item.PositionID }, new AjaxOptions
 {
       HttpMethod = "POST",
       Confirm = "Are you sure you want to apply for " + item.Title + "?",
       OnSuccess = "deactive"
  }, new { @class = "btn btn-info float-right", id = "oneClick" + item.PositionID, style = "margin-left:10px; margin-right:10px" })
  }

Вот часть jquery:

  <script type="text/javascript">
    function deactive(data) {
        $('#oneClick' + data.id)addClass('disabled').text("Applied");

    }
</script>

Это ошибка, которую я получаю: https://i.imgur.com/o23bHUZ.jpg Вот как выглядит мой пользовательский интерфейс: https://i.imgur.com/r3IASim.jpg

Код кнопки 1 нажатия:

   [AcceptVerbs(HttpVerbs.Post)]      
    public JsonResult OneClickApply(int id)
    {
        Application ctx = new Application();
        Position position = db.Positions.Find(id);
        OpenPosition open = db.OpenPositions.Where(op => op.PositionID == id).FirstOrDefault();
        //open.PositionID = open.OpenPositionID;

        string userID = User.Identity.GetUserId();
        UserDetail currentUser = db.UserDetails.Where(ud => ud.UserID == userID).FirstOrDefault();


        ctx.OpenPositionID = open.OpenPositionID;
        ctx.UserID = currentUser.UserID;
        ctx.ApplicationDate = DateTime.Today.Date;
        ctx.ResumeFileName = currentUser.ResumeFileName;
        ctx.ApplicationStatusID = 1;
        db.Applications.Add(ctx);
        db.SaveChanges();
        string confirmMessage = string.Format("You have just applied for '{0}'!", open.Position.Title);

        return Json(new { id = id, message = confirmMessage});
    }

Товся страница из cshtml

    @model PagedList.IPagedList<JobBoard.DATA.EF.Position>
         @using System;
         @using PagedList.Mvc
       @{
        ViewBag.Title = "Index";
        }
        <section class="section-hero overlay inner-page bg-image" 
         style="background-image: url('/Content/images/hero_1.jpg');" 
         id="home-section">
         <div class="container">
        <div class="row">
            <div class="col-md-7">
                   <h1 class="text-white font-weight-bold">Admin Panel</h1>
                    <div class="custom-breadcrumbs">
                         <a href="/Home/Index">Home</a> <span class="mx-2 slash">/</span>
                         <a href="/Home/Positions">Positions</a> <span class="mx-2 slash">/</span>
                    <span class="text-white"><strong>@ViewBag.Title</strong></span>
                </div>
            </div>
        </div>
    </div>
</section>
           <section class="site-section" id="next-section">
           <div class="container">
             <div class="row">
               <div class="col-lg-12 mb-5 mb-lg-0">


                   <p>
                       @Html.ActionLink("Create New", "Create")
                   </p>

                   @using (Html.BeginForm("Index", "Positions", FormMethod.Get))
                {
                    <div style="border:2px solid lightblue; margin-top:10px;margin-bottom:10px;padding:15px">
                        Find by name: @Html.TextBox("SearchString", ViewBag.CurrentFilter as string)
                        <input type="submit" value="Search" />
                    </div>

                }
                <span style="margin-top:10px; margin-bottom:10px;">
                    Page @(Model.PageCount < Model.PageNumber ? 0 : Model.PageNumber) of @Model.PageCount

                    @Html.PagedListPager(Model, page => Url.Action("Index", new { page, currentFilter = ViewBag.CurrentFilter }))
                </span>
                <a href="#">content</a>
                @if (Model.Count() > 0)
                {
                    <table id="myTable" class="table table-striped">
                        <thead>
                            <tr>
                                <th>
                                    Title
                                </th>
                                <th>
                                    Job Description
                                </th>
                                <th></th>
                            </tr>
                        </thead>

                        <tbody>
                            @foreach (var item in Model)
                            {
                                <tr>
                                    <td>
                                        <a href="/Positions/Details/@item.PositionID"> @Html.DisplayFor(modelItem => item.Title)</a>
                                    </td>
                                    <td style="width:270px">

                                        @*@item.JobDescription.Substring(0, Math.Min(item.JobDescription.Length, 200)) ...*@



                                        @Html.Raw(item.JobDescription.Substring(0, Math.Min(item.JobDescription.Length, 200))) ...


                                    </td>
                                    <td>
                                        @if (User.IsInRole("Admin") || User.IsInRole("Manager"))
                                        {
                                            <span class="float-right" style="margin-left:10px; margin-right:10px">
                                                @Html.ActionLink("Edit", "Edit", new { id = item.PositionID }, new { @class = "btn btn-primary" })
                                            </span>
                                            <span class="float-right" style="margin-left:10px; margin-right:10px"> @Html.ActionLink("Delete", "Delete", new { id = item.PositionID }, new { @class = "btn btn-danger" })</span>

                                        }
                                        <span class="float-right" style="margin-left:10px; margin-right:10px"> @Html.ActionLink("Details", "Details", new { id = item.PositionID }, new { @class = "btn btn-warning " })</span>

                                        @if (User.Identity.IsAuthenticated)
                                        {
                                            @Ajax.ActionLink("1-Click-Apply", "OneClickApply", new { id = item.PositionID }, new AjaxOptions
                                       {
                                           HttpMethod = "POST",
                                           Confirm = "Are you sure you want to apply for " + item.Title + "?",
                                           OnSuccess = "deactive"
                                       }, new { @class = "btn btn-info float-right", id = "oneClick" + item.PositionID, style = "margin-left:10px; margin-right:10px" })
                                        }




                                    </td>
                                </tr>
                            }
                        </tbody>

                    </table>
                }
                else
                {
                    <p>Sorry your criteria did not return any result.Please try again or or hit "Go!" to refresh the page</p>
                }

            </div>
        </div>
    </div>
</section>
          @section scripts{

    <script type="text/javascript">
        function deactive(data) {
            $('#oneClick' + data.id).addClass('disabled').text("Applied");

        }
    </script>


    }

1 Ответ

0 голосов
/ 18 октября 2019

В ajax OnSuccess вы не передаете идентификатор позиции для функции deactivate, поэтому ваш скрипт ничего не делает, потому что параметр функции data равен нулю

@Ajax.ActionLink("1-Click-Apply", "OneClickApply", new { id = item.PositionID }, new AjaxOptions
 {
       HttpMethod = "POST",
       Confirm = "Are you sure you want to apply for " + item.Title + "?",
       OnSuccess = "deactive"
  }, new { @class = "btn btn-info float-right", id = "oneClick" + item.PositionID, style = "margin-left:10px; margin-right:10px" })
  }

, так что исправьте этоВы должны вызвать deactive() с параметром PositionId;

OnSuccess = "deactive('" + item.PositionID + "')"

, и затем в своем скрипте вы можете получить доступ к идентификатору, выполнив

function deactive(id) {
        $('#oneClick' + id)addClass('disabled').text("Applied");

    }

Ваш Ajax Helper должен выглядеть следующим образом;

@Ajax.ActionLink("1-Click-Apply", "OneClickApply", new { id = item.PositionID }, new AjaxOptions
 {
       HttpMethod = "POST",
       Confirm = "Are you sure you want to apply for " + item.Title + "?",
       OnSuccess = "deactive('" + item.PositionID + "')"
  }, new { @class = "btn btn-info float-right", id = "oneClick" + item.PositionID, style = "margin-left:10px; margin-right:10px" })
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...