在派生页面中触发按钮事件时母版页方法 returns null

Masterpage method returns null when firing a button event in a derived page

基本上在母版页上我有一个方法 returns 一个 "campaign" 带有唯一 ID 和用户 ID 的参数。在我单击派生页面中的按钮之前效果很好。

问题是当我单击派生页面中的按钮时母版页中的方法 returns "null"。即使在调试时我也看到了正确的参数。

编辑// return 为空的方法:

var campaign = campaignRepository.GetCampaignById(convertedCampaignId, user.UserId);

母版页代码:

protected void Page_Load(object sender, EventArgs e)
        {
                string securityToken = "";

                if (HttpContext.Current.Request.Cookies["SecurityToken"] != null)
                {
                 securityToken = HttpContext.Current.Request.Cookies["SecurityToken"].Value.ToString();
                }

                var user = User.GetLoggedInUser(securityToken);

                if (user != null)
                {
                    var convertedCampaignId = Request.QueryString["cid"];

                    //If the querystring exists process ELSE force 
                    if (!string.IsNullOrWhiteSpace(convertedCampaignId))
                    {
                        using (var campaignRepository = new CampaignRepository())
                        {
                            var campaign = campaignRepository.GetCampaignById(convertedCampaignId, user.UserId);

                            //Does the campaign exist from the passed in query string,
                            if (campaign != null)
                            {
                                ccid = "'" + campaign.ConvertedCampaignId + "'";

                                //Build Navigation
                                StringBuilder sbNav = new StringBuilder();
                                string nav = KTO.Common.Reader.ReadFile("/templates/html/side-nav.html");
                                sbNav.AppendLine(nav.Replace("{convertedCampaignId}", campaign.ConvertedCampaignId));

                                ltlNavItems.Text = sbNav.ToString();

                                ltlCampaignName.Text = "Campaign: " + "<strong>" + campaign.Name + "</strong>";

                                //Get campaigns for dropdown
                                IEnumerable<Campaign> campaigns = campaignRepository.GetCampaigns(user.UserId);
                                    StringBuilder sbCampaigns = new StringBuilder();
                                    string strCampaigns =
                                        "<li title='{campaignName}' data-cid='{convertedCampaignId}' class='js-campaign-item'>" +
                                        "<p class='name-message'><a href='/panel/c/{convertedCampaignId}/' class='campaign-lnk'>{campaignName}</a>" +
                                        "</p>" +
                                        "</li>";

                                    foreach (var c in campaigns)
                                    {
                                        sbCampaigns.AppendLine(strCampaigns.Replace("{convertedCampaignId}", c.ConvertedCampaignId)
                                            .Replace("{campaignId}", c.CampaignId.ToString())
                                            .Replace("{campaignName}", c.Name));
                                    }

                            }
                            else
                            {
                                Response.Redirect("/notifications/404/");
                            }
                        }
                    }
                    else
                    {
                        Response.Redirect("/notifications/404/");
                    }
                }
                else
                {
                    Response.Redirect("/login/");
                }

        }

派生页面逻辑:

protected void btnInviteUsers_Click(object sender, EventArgs e)
        {
            if (txtEmail.Text.Trim() != "")
            {
                if (txtEmail.Text.Trim().Length < 75)
                {
                    if (Common.Email.IsValidEmail(txtEmail.Text.Trim()) == true)
                    {
                        string securityToken = "";
                        if (HttpContext.Current.Request.Cookies["SecurityToken"] != null)
                        {
                            securityToken = HttpContext.Current.Request.Cookies["SecurityToken"].Value.ToString();
                        }
                        var user = Business.Entity.User.GetLoggedInUser(securityToken);
                        if (user != null)
                        {
                            try
                            {
                                using (var userRepo = new UserRepository())
                                {
                                    var userInSystem = userRepo.UserExists(txtEmail.Text.Trim().RemoveHtml());

                                    if (userInSystem == true)
                                    {
                                        ltlReturnMessage.Text = "Unfortunately we cannot send the request, as the user already exists.";
                                    }
                                    else
                                    {
                                        //Craft querystring
                                        string encryptedEmail = user.EncryptedEmail;
                                        int uid = user.UserId;

                                        string userInviteHTML = Common.Reader.ReadFile("/templates/emails/user-invite.html");
                                        StringBuilder sb = new StringBuilder();
                                        sb.AppendLine(userInviteHTML.Replace("{link}", "http://localhost:52447/_user-invite/?inor-t-em=" + encryptedEmail + "&inor-d=" + uid.ToString()));

                                        Common.Email.SendMail(txtEmail.Text.Trim(), "", "", user.FirstName + " " + user.LastName + " invited you to join x", sb.ToString());

                                        ltlReturnMessage.Text = "Invite sent!";
                                    }
                                }

                            }
                            catch
                            {
                                ltlReturnMessage.Text = "Problem sending invite, please try again.";
                            }
                        }

                    }
                    else
                    {
                        ltlReturnMessage.Text = "Are sure that's an email address? Please try again.";
                    }
                }
                else
                {
                    ltlReturnMessage.Text = "Email Address must not exceed 75 characters.";
                }

            }
            else
            {
                ltlReturnMessage.Text = "Email Address required.";
            }
        }

请考虑该方法在任何页面上 return "campaign" 但只是在页面回发时不会。

仔细检查每一行后,我注意到我的查询字符串重复了。当从我的派生页面触发按钮单击事件时,它会 post 返回 运行 我在母版页上的逻辑。我认为它对 url-重写造成了严重破坏。

我通过添加

解决了这个问题
frmInviteUser.Action = Request.RawUrl;

在我的派生页面的 page_load 中,这将强制 url 而不是 post 返回主页面的请求。

这就是我在方法上得到空值的原因,传递的参数是重复的。

此致,