この問題を解決しようとしてから数日が経ちました。Web サイトにメールの受信トレイであるページがあります。Facebookのようにリストから友達にメッセージを送ることができます。
js ファイル、2 つの ashx ファイル、および aspx、aspx.cs ファイルに AJAX コードが含まれています。
ユーザーが友人にメッセージを送信したいときに、フェイスボックスのポップアップを使用していました。UI を変更してフェイスボックスを削除し、マスターページを追加して、ページがサイトの他のページと同じになるようにしました。しかし、masterpage を messages.aspx ページに追加した後、メッセージの送信をクリックすると HttpContext の値が null になります。友達リストと以前のメッセージを表示するページが最初に読み込まれると、それらは正常に機能しています。失われたのは、送信をクリックして入力したメッセージを保存するためにjs関数を起動したときです。
message.aspx ページで、3 つの非表示フィールドを使用します。
<script>
function SavePostedMessage() {
var SenderAccountID = $("#hdnSenderID").val();
var ReceiverAccountID = $("#hdnReceiverID").val();
var Days = $("#hdnDays").val();
var body = GetmessageData();
if (body != null || body != "")
SaveMessageInDatabase(SenderAccountID, ReceiverAccountID, body, Days);
}
</script>
<asp:HiddenField ID="hdnSenderID" runat="server" />
<asp:HiddenField ID="hdnReceiverID" runat="server" />
<asp:HiddenField ID="hdnDays" runat="server" />
<a style="cursor: pointer;" onclick="SavePostedMessage()">
<div style="height: 25px; width: 85px; float: left; margin-top: 28px; padding-top: 5px; background: #01B2E5; text-align: center;" id="uploadifyContainer">
<span style="color: White; font-size: 12px;font-weight:bold; margin-left: 5px; border: 1px solid #D4D4D4;" id="Content_lblAddPhoto">Send</span>
</div>
</a>
</div>
messages.aspx.cs で、js 関数を登録するコードを page_load に入れました。
ScriptManager.RegisterStartupScript(
this,
typeof(string),
"Play",
"javascript:GetMessageConversation('" + Request.QueryString["AccountID"] + "','" + _userSession.CurrentUser.AccountID + "','7');", true);
Ajax.js で私が定義した
function GetMessageConversation(SenderAccountID, ReceiverAccountID, Days) {
$("#hdnSenderID").val(SenderAccountID);
$("#hdnReceiverID").val(ReceiverAccountID);
$("#hdnDays").val(Days);
$("#divPostComment").show();
setSelected("trUser" + ReceiverAccountID);
$.ajax({
type: "POST",
url: "/MessageFacebox/GetMessageConversation.ashx",
data: 'SenderAccountID=' + SenderAccountID + "&ReceiverAccountID=" + ReceiverAccountID + "&Days=" + Days,
success: function (data) {
$('#messageconversationdata').html(data);
Scrollbottom();
},
error: function (errordata) {
alert('Sorry some error occurred');
}
});
}
function SaveMessageInDatabase(SenderAccountID, ReceiverAccountID, Body, days) {
$.ajax({
type: "POST",
url: "/MessageFacebox/SaveMessage.ashx",
data: 'SenderID=' + SenderAccountID + "&ReceiverID=" + ReceiverAccountID + "&Body=" + Body,
success: function (data) {
GetMessageConversation(SenderAccountID, ReceiverAccountID, days);
},
error: function () {
alert('Sorry some error occurred');
}
});
}
GetMessageConversation.ashx 内
context.Request.Form["SenderAccountID"]
保存された値をcontext.Request.Form["ReceiverAccountID"]
返す
Account senderAccount = _accountRepository
.GetAccountByAccountID(Convert.ToInt32(context.Request.Form["SenderAccountID"]));
Account receiverAccount = _accountRepository
.GetAccountByAccountID(Convert.ToInt32(context.Request.Form["ReceiverAccountID"]));
ただし、SaveMessage.ashx では
Account senderAccount = _accountRepository
.GetAccountByAccountID(Convert.ToInt32(context.Request.Form["SenderID"])) ;
Account receiverAccount = _accountRepository
.GetAccountByAccountID(Convert.ToInt32(context.Request.Form["ReceiverID"] ));
context.Request.Form["SenderID"]
context.Request.Form["ReceiverID"]
null 値があります。
最初のページは、ページが最初にアクセスされたときに読み込まれます。ユーザーがメッセージを入力し、messages.aspx の送信ボタンをクリックすると、保存関数が呼び出されます。
マスターページがなくてもすべて正常に動作します。masterpage ファイルを messages.aspx に追加すると、コードが機能しなくなります。
前もって感謝します。