Jquery.Get вызов метода контроллера не всегда работает - PullRequest
0 голосов
/ 26 апреля 2019

На моей веб-странице у меня есть таблица, которая отображает 5 строк данных, при щелчке по одной из этих строк в метод класса контроллера отправляется запрос get, который возвращает некоторые данные и заполняет форму этими данными.

Моя основная проблема заключается в том, что в зависимости от того, каким образом я перенаправляю на эту страницу (со своей страницы входа или с другой страницы), этот запрос на получение не всегда работает.

Работает нормально, если я перенаправляю на эту страницу из логина, но откуда-то еще запрос get не вызывается. Я попытался добавить точку останова в моем методе контроллера, но программа никогда не достигает его (кроме перенаправления от входа в систему).

Я пытался добавить метод Jquery.click в функцию в $ (document) .ready (function () {code here ..}), но это не имеет значения.

Метод контроллера

//This function returns a CSV of data
public string GetEntryFromRecentEntries(string userID, int index)
{
    string entryID = this.GetRecentEntries(userID, 5)[index][0];

    DOCOsoft.DataAccess.DatabaseReader dBReader = new DOCOsoft.DataAccess.DatabaseReader();
    List<SqlParameter> parameters = new List<SqlParameter>();

    parameters.Add(new SqlParameter("@entryID", entryID));

    StringBuilder entryData = new StringBuilder();
    using (IDataReader singleEntryReader = dBReader.ExecuteReader(ConfigurationManager.ConnectionStrings[1].ToString(), "get_entries", parameters))
    {
        while (singleEntryReader.Read())
        {
            entryData.Append(singleEntryReader["CompanyID"].ToString() + ",");
            entryData.Append(singleEntryReader["ProjectID"].ToString() + ",");
            entryData.Append(singleEntryReader["JobID"].ToString() + ",");
            entryData.Append(singleEntryReader["DurationInHours"].ToString() + ",");
            entryData.Append(singleEntryReader["Notes"].ToString());
        }
    }

    return entryData.ToString();
}

View

<div class="modal" id="addJobModal" role="dialog">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header2 right">
                    <a class="col-md-offset-11 btn btn-default" data-dismiss="modal" aria-hidden="true"><i class="glyphicon glyphicon-remove "></i></a>
                </div>
                <div class="modal-body">

                    @using (Html.BeginForm("AddTimesheetEntry", "Home", new { date = ViewBag.Date }, FormMethod.Post, new { @id = "CreateTimesheetEntryForm", @data_ProjectAreaListAction = @Url.Action("GetProjectAreas") }))
                    {
                        @Html.Hidden("UserID", User.Identity.GetUserId())

                        <label class="col-lg-3">Company</label>
                        @Html.ValidationMessage("CompanyID", "Company is required")
                        @Html.DropDownList("CompanyID", (SelectList)ViewBag.Companies, "", new { @class = "form-control", @id = "CompanyID", @required = "required" })
                        <br />
                        <!-- TODO - If statement here to check if Company ID matches Compnay ID in Projects and if visible?-->
                        <label class="col-lg-3">Project</label>
                        @Html.ValidationMessage("ProjectID", "Project is required")
                        @Html.DropDownList("ProjectID", (SelectList)ViewBag.Projects, "", new { @class = "form-control", @id = "ProjectID", @disabled = "disabled", @required = "required" })
                        <br />

                        <label class="col-lg-3">Job</label>
                        @Html.ValidationMessageFor(m => m.JobID, "Job is required")
                        @Html.DropDownListFor(m => m.JobID, (SelectList)ViewBag.Jobs, "", new { @class = "form-control", @id = "JobID", @required = "required" })
                        <br />
<!--
This form continues down but I have cut off the end to shorten this code block
.
.
.
-->



<div class="recent-entry-padding">
    <div class="recent-entry-popup">
        <div class="recent-entry-title">Recent Entries</div>
        <table id="recent-entry-table">
            <tr class="recent-entry-header">
                <th>Date</th>
                <th>Company</th>
                <th>Project</th>
                <th>Job</th>
                <th>Notes</th>
                <th>Hours</th>
            </tr>
            @{bool alternatingRow = true; }

            @foreach (string[] recentEntry in ViewBag.RecentTimesheetEntries)
            {
                string className = alternatingRow == true ? "recent-entry-row" : "recent-entry-row alternating-row";

                <tr class="@className">
                    <td>@recentEntry[1]</td>
                    <td>@recentEntry[2]</td>
                    <td>@recentEntry[3]</td>
                    <td>@recentEntry[4]</td>
                    <td>@recentEntry[5].Substring(0, recentEntry[5].Length > 30 ? 30 : recentEntry[5].Length) </td>
                    <td class="recent-entry-row number">@recentEntry[6]</td>
                </tr>

                alternatingRow = !alternatingRow;
            }

        </table>
    </div>
</div>


<script>
.
.
.

$(".recent-entry-row").click(function () {
        alert('@ViewBag.CurrentUserID');
        var entryData = $.get('TimesheetEntry/GetEntryFromRecentEntries', { userID: '@ViewBag.CurrentUserID', index: this.sectionRowIndex - 1 }, function (data) {

            alert("Jquery.get has called the the controller method, this does not popup if not redirecting through login page");
            //Do Something

        });
    });

.
.
.
</script>

1 Ответ

1 голос
/ 26 апреля 2019

Добавить / за URL. если ваш проект выполняется в папке "@ Url.Content (" ~ / ")", используйте.

...
$.get('/TimesheetEntry/GetEntryFromRecentEntries',{value: 'value'})
...

или

...
$.get('@(Url.Content("~/"))TimesheetEntry/GetEntryFromRecentEntries',{value: 'value'})
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...