Данные Ajax POST не отображаются в модальном режиме - PullRequest
1 голос
/ 15 октября 2019

У меня есть таблица, которая заполнена данными JSON. В последнем столбце вы можете открыть модал, соответствующий каждой строке, и вы можете добавить комментарий в поле ввода - это обновит этот модал. Другими словами, строки таблицы, у которых нет комментариев, имеют пустой модал, и строки с хотя бы одним комментарием должны появляться в модале, которому они соответствуют.

В моем бэкэнд-менеджере (SQL Server Management Studio) я вижучто там показываются комментарии, но они не появляются в модальностях.

Я не могу сказать, происходит ли проблема со стороны JavaScript (представление) или из модели, или из другого места.

Добавление DocBudgetId является относительно новым. До этого данные рецензирования / комментариев были привязаны к номеру документа, а информация появлялась в модальностях. Я подозреваю, что мне нужно изменить / изменить DocBudgetId, но я не уверен, как это сделать.

Модальный снимок экрана: https://i.stack.imgur.com/Vqd4o.png На дисплее появляется DocNumberверхний левый. Были сделаны комментарии к строке, к которой принадлежит этот модал, но они не отображаются в модальной таблице.

Модель:

public class ReviewRow
    {
        public Guid DocBudgetId { get; set; }
        public string DocNumber { get; set; }
        public string ReviewBy { get; set; }
        public string ReviewOn { get; set; }
        public string ReviewComment { get; set; }   
    }

Вид:

<div class="modal-body">
        <div id="review"></div>
        <table>
           <tr>
              <td>
                @Html.LabelFor(x => Model.ReviewComment)<br />
                @Html.TextAreaFor(x => x.ReviewComment, new { style = "width: 200px; " })<br />
                @Html.HiddenFor(x => x.DocUnderReview, new { id = "txtDocUnderReview" })
                <input type="submit" value="@BB360.Models.BudgetReportingViewModel.Buttons.Review" name="@Html.NameFor(x => x.SubmitButton)" id="SubmitButton" class="btn btn-secondary" />
              </td>
           </tr>
        </table>


// --- other code --- //

function ShowReviewModal(DocBudgetId, DocNumber) { 
        $("#txtDocUnderReview").val(DocNumber);
        console.log(DocNumber)

        $.ajax({
            type: "POST",
            url: "/Doc/GetDocUnderReviewDetails",
            data: "docNumber=" + DocNumber + "&docBudgetId=" + DocBudgetId,
            timeout: 5000,
            success: function(data) {
                console.log(data); // ------------- empty array
                // write out the modal table
                var tBody = $("#tblExpenseDeductionDetails tbody");
                tBody.empty();
                s = "";

                for (x = 0; x < data.length; x++) {
                  let ReviewBy = data[x].ReviewBy,
                      ReviewOn = data[x].ReviewOn,
                      ReviewComment = data[x].ReviewComment;
                        s = s + "<tr>";
                        s = s + "<td>" + ReviewBy + "</td>";
                        s = s + "<td>" + ReviewOn + "</td>";
                        s = s + "<td title='" + ReviewComment.replace(/'/g, '') + "' style='max-width:550px;word-wrap: break-word;'>" + stringTruncate(ReviewComment, 65) + "</td>";
                        s = s + "</tr>";
                }

                $("#modalDocName").text(DocNumber);
                tBody[0].innerHTML = s;
                $("#ReviewModal").modal();
            },
            error: function (XMLHttpRequest, textStatus, errorThrown) {
                alert(errorThrown);
            }
        });

        $("#ReviewModal").modal();
    }

Контроллер

public ActionResult BudgetReporting(BudgetReportingViewModel model)
        {
            Common.GetDbExecutor().QueryNonQuery(Sql.InsertDocUnderReview, new {
                model.DocBudgetId, 
                DocNumber = model.DocUnderReview, // D is uppercase
                ReviewBy = Common.GetUserName(),
                ReviewComment = model.ReviewComment,
            }, 30).ToString();

            PopulateBudgetReportingDetail(model);

            return View(model);
        }

        public ActionResult GetDocUnderReviewDetails(Guid docBudgetId) // camelCase // 
        {
            var data = Common.GetKKDbExecutor().Query<BudgetReportingViewModel.ReviewRow>(Sql.GetDocUnderReviewDetails, new {
               docBudgetId
            }).ToList();

            return Json(data);
        }

Файл Sql

namespace BB360
{
    public partial class Sql
    {
        public const string GetDocUnderReviewDetails = @"

        select 
            DocBudgetId, 
            DocNumber, 
            ReviewBy, 
            convert(varchar, ReviewOn, 101) as ReviewOn, 
            isnull(ReviewComment, '') as ReviewComment 
            from DocBudgetReview 
            where DocBudgetId = @DocBudgetId
            order by ReviewOn desc   
        ";
    }
}

Ответы [ 2 ]

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

Обновление: я немного повозился и получил данные таблицы.

В хранимой процедуре (GetDocUnderReviewDetails.cs) я закомментировал строку where DocBudgetId = @DocBudgetId и добавил where DocNumber = @DocNumber. Я заметил, что если я только что закомментировал where DBI =, то он показал всех комментариев, сделанных для каждого модального объекта, с которой я сталкивался ранее.

Итак, теперь мой сохраненныйпроцедура выглядит следующим образом:

namespace BB360
{
    public partial class Sql
    {
        public const string GetDocUnderReviewDetails = @"

        select 
            DocBudgetId, 
            DocNumber, 
            ReviewBy, 
            convert(varchar, ReviewOn, 101) as ReviewOn, 
            isnull(ReviewComment, '') as ReviewComment 
            from DocBudgetReview 
            --where DocBudgetId = @DocBudgetId
            where DocNumber = @DocNumber
            order by ReviewOn desc   
        ";
    }
}

Я также добавил string docNumber в контроллер:

public ActionResult GetDocUnderReviewDetails(Guid docBudgetId, string docNumber)
        {
            var data = Common.GetBBDbExecutor().Query<BudgetReportingViewModel.ReviewRow>(Sql.GetDocUnderReviewDetails, new {
                docBudgetId,
                docNumber
            }).ToList();


            return Json(data);
        }
0 голосов
/ 15 октября 2019

Проблема в том, что ваше действие «GetDocUnderReviewDetails» принимает запрос GET, и вы отправляете ему запрос на публикацию. Вам просто нужно изменить тип запроса ajax на GET.

type: "GET",
url: "/Doc/GetDocUnderReviewDetails",

Еще одна вещь, которую я заметил, это то, что вы отправляете docNumber также в запросе, который не требуется вашим действиям. Хотя это не вызовет никаких проблем, но вам не нужно отправлять это в ajax

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...