Страницы бритвы, возвращающие частичное представление, элемент, переданный в, является нулем - PullRequest
0 голосов
/ 21 июня 2019

Я новичок в Razor и частичках. По сути, моя общая потребность в том, чтобы иметь возможность обновлять таблицу, когда пользователь нажимает кнопку.

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

Код Ajax

<script>
    $(document).ready(function(){
        $("#AddContactQue").click(function(e)
        {
            e.preventDefault();
            var name = $('#contactName').val();
            var role = $('#contactRole').val();
            console.log(name+','+role);
            $.ajax({
                    url: "AddApplication?handler=AddContactToQue",
                    type: "POST",
                    dataType: "json",
                    data: { name,role },
                    beforeSend: function (xhr) {
                        xhr.setRequestHeader("XSRF-TOKEN",
                            $('input:hidden[name="__RequestVerificationToken"]').val());
                    },
                    success: function () {
                        alert("success");
                    },
                    complete: function () {
                        $('#contactsTB').load('/AddApplication?handler=AppPartial');
                    },
                    failure: function () {
                        alert("failure");
                    }
                })
        });
    });
</script>

После завершения я делаю ajax-вызов, чтобы обновить мой частичный.

Из того, что я прочитал в Интернете, ajax preventDefault должен предотвратить любые "обратные передачи", поэтому мои данные в моем коде не должны быть потеряны.

Проблема сейчас в том, что я заполняю свой словарь, а затем, когда он идет, чтобы обновить частичное, словарь является нулевым. Следовательно, часть возвращает пустую таблицу, в которой ничего нет.

Метод обновления информации

public void OnPostAddContactToQue(string name, string role)
        {
            Console.WriteLine("----------urlcount=-----"+appURLS.Count);           
            if(HttpContext.Session.GetString("selectedContact") == null)
            {
                string s = name + ",";
                HttpContext.Session.SetString("selectedContact", s);
            }
            else 
            {
                string l = HttpContext.Session.GetString("selectedContact");

                l += name + ",";

                HttpContext.Session.SetString("selectedContact",l);
            }



            if(HttpContext.Session.GetString("selectedContactRole") == null)
            {
                string s = role + ",";
                HttpContext.Session.SetString("selectedContactRole", s);
            }
            else 
            { 
                string l = HttpContext.Session.GetString("selectedContactRole");

                l += role + ",";

                HttpContext.Session.SetString("selectedContactRole",l);
            }

            contactQue = HttpContext.Session.GetString("selectedContact");
            contactRoleQue = HttpContext.Session.GetString("selectedContactRole");

            List<string> cList = contactQue.Split(',').ToList<string>();
            List<string> crList = contactRoleQue.Split(',').ToList<string>();

            for(int i = 0; i < cList.Count; i ++)
            {
                appContacts.Add(cList[i],crList[i]);
            }

            PopulateTools();

            Console.WriteLine(HttpContext.Session.GetString("selectedURLS"));
        }

Метод GetPartial

public Microsoft.AspNetCore.Mvc.PartialViewResult OnGetAppPartial()  
        {
            return new Microsoft.AspNetCore.Mvc.PartialViewResult{ViewName = "_AppPartial",ViewData = new Microsoft.AspNetCore.Mvc.ViewFeatures.ViewDataDictionary<Dictionary<string,string>>(ViewData,appContacts)};
        }

При нажатии OnGetAppPartial словарь appContacts становится пустым. Я не понимаю, почему для него задано значение NULL, поскольку preventDefault должно остановить перезагрузку страницы.

_AppPartial.cshtml

@model Dictionary<string,string>

<table class="table table-striped">
    <tbody>
     @foreach(var s in Model)
        {
            <tr>
                <td>
                    @Html.Raw(s.Key + " - " + s.Value)
                </td>
            </tr>
        }
    </tbody>  
</table>

Я следовал https://www.mikesdotnetting.com/article/325/partials-and-ajax-in-razor-pages в качестве ссылки.

...