剃刀页面返回部分视图,传入的项目为null

时间:2019-06-21 17:05:58

标签: c# jquery asp.net-mvc razor partial-views

我是Razor和Partial的新手。基本上,我的总体需求是能够在用户单击按钮时更新表。

我现在要做的是单击按钮,一个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应该阻止任何“回发”的发生,因此我后面代码中的数据不会丢失。

现在的问题是我填满了字典,然后在更新部分字典时,字典为空。因此,partial返回一个空表,里面没有任何内容。

更新信息方法

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作为参考。

0 个答案:

没有答案