2

この問題を解決しようとしてから数日が経ちました。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 に追加すると、コードが機能しなくなります。

前もって感謝します。

4

0 に答える 0