簡體   English   中英

當文本框通過javascript更改客戶端時,ASP.NET文本框在回發后丟失值

[英]ASP.NET textbox losing value after postback when value is changed client-side via javascript

我通過javascript客戶端設置文本框的值。 當我刷新頁面時,值會丟失。

文本框未禁用或設置為只讀。

我已經閱讀了將值放在隱藏字段中的建議,我寧願不這樣做。 這似乎是一個黑客。

文本框在用戶控件中如下:

<div id="Row" class="RaidRow" runat="server">
    <asp:Button ID="RaidRowButton" runat="server" CssClass="RaidRowButton" OnClick="RaidRowButton_Click" />
    <asp:TextBox ID="CharacterNameTextBox" runat="server" CssClass="RaidRowControl SlotTextBox" MaxLength="12" />
    <asp:Label ID="ClassNameLabel" runat="server" CssClass="RaidRowControl ClassLabel" />
</div>

此控件位於.aspx頁面上。

當用戶雙擊文本框時,在文本框具有焦點時按Enter鍵,或者更改文本,將調用以下javascript函數:

function VerifyCharacter(slotNumber, event)
{
    var enterWasPressed = false;

    if (event && event.which == 13)
    {
        enterWasPressed = true;
    }
    else if (window.event && window.event.keyCode == 13)
    {
        enterWasPressed = true;
    }

    if (event == null || enterWasPressed)
    {
        var realmName = 'Lightninghoof';

        var characterNameTextBox = GetCharacterNameTextBox(slotNumber);
        characterNameTextBox.style.color = '#CCCCCC';

        var classLabel = GetClassNameLabel(slotNumber);
        classLabel.style.color = '#CCCCCC';
        classLabel.innerHTML = 'Unknown';

        WoW_Stats.CharacterInformation.GetCharacterInformation(realmName, characterNameTextBox.value, slotNumber, GetCharacterInformation_Success, GetCharacterInformation_Failed);
    }
}

完成Web服務調用后,將調用以下javascript函數:

function GetCharacterInformation_Success(characterInformationResult)
{
    var characterInfo = Sys.Serialization.JavaScriptSerializer.deserialize(characterInformationResult, true);

    var classLabel = GetClassNameLabel(characterInfo.SlotNumber);
    classLabel.style.color = characterInfo.ClassColor;
    classLabel.innerHTML = characterInfo.ClassName;

    var characterNameTextBox = GetCharacterNameTextBox(characterInfo.SlotNumber);
    characterNameTextBox.style.color = characterInfo.ClassColor;
}

唯一的問題是,當我刷新頁面時,通過javascript設置客戶端的CharacterNameTextBox和ClassNameLabel中的文本將丟失。

如何確保控件在回發之間保留其值?

刷新頁面(按F5)與回發不同。 我不相信文本框中的值會在刷新時回發到服務器。 文本框中的值將在回發時回發到服務器(只要TextBox的ReadOnly屬性未設置為true,但這是一個不同的故事)。

我認為如果文本框不可編輯:Enabled = False或ReadOnly = false。
Asp.net“出於安全原因”從其ViewState獲取此文本框中的值。
這就是為什么當你使用像HiddenField或Input這樣的東西時,你可以獲得價值。

在頁面preinit事件中,嘗試訪問如下所示的值:

請求[ “CharacterNameTextBox”]

我遇到了同樣的問題(通過javascript設置的值永遠不會回發,但輸入的值會有)並且同事建議它。 死了,就像一個魅力。

唯一的問題是,當我刷新頁面時, 通過javascript設置客戶端的CharacterNameTextBox和ClassNameLabel中的文本將丟失。

由於您設置了客戶端的值,我建議使用cookie來存儲該數據並在客戶端檢查該cookie,因為如果您只是設置客戶端的值而不管CodeBehind會是什么,ViewState將無法幫助您把它設置為。

另一種解決方案是Session,您可以在第一次加載或外部頁面中分配會話,然后檢查會話是否為空,然后將值設置為文本框。 以下是示例:在外部頁面中:

   if (id == "txtDD")
        {
          Session["DD"] = calendar.SelectedDate.ToShortDateString();
        }
and in code behind check it:

protected void Page_Load(object sender, EventArgs e)
   {
    if(Session["DD"]!= null)
       txtDD.Text =Session["DD"].ToString();
   }

您可以嘗試這樣做,而不是只讀文本框

onKeyPress = "javascript: return false;" onPaste = "javascript: return false;" 

它不會失去它的價值。

將值存儲在隱藏字段中並不比.NET Web Forms本身更糟糕。 大多數應用程序數據都傳遞/存儲在隱藏的__VIEWSTATE字段中。

話雖這么說,你能澄清一下發生了什么嗎? 您是在頁面加載時設置值還是對某些用戶操作做出反應? 你能提供一些代碼,以便我們能夠更清楚地了解你在做什么嗎?

編輯

您是否在頁面加載/回發代碼隱藏中明確設置文本框或標簽的值? 這將覆蓋客戶端腳本設置的任何值。 我想不出為什么這些價值觀不會持續存在的任何其他原因。 如果你真的很絕望,你可以在你的javascript函數結束時通過AJAX調用將信息發送回服務器,這樣你就可以把它放在服務器內存的某個地方了。

你什么時候設定價值? 只要您使用文本框的clientId,就可以在javascript中設置頁面的值onload。

問題可能是兩件事之一。 刷新可以清除然后字段。 此外,如果您要回發,是否在頁面加載(或卸載)事件上設置文本框的值?

你必須記住,親吻。

只需將現有字段視為表現性字段,並使用runat =“server”屬性添加隱藏的輸入字段,並在同一客戶端事件中使用JavaScript設置這些字段。

這些是您在代碼隱藏方法中想要的真正價值,並且您將能夠抓住那些沒問題。 由於textbox對象是.NET抽象,我建議在使用在服務器上運行的HTML輸入進行客戶端工作時。 當我在網絡形式BS中膝蓋深處時,這似乎讓我頭疼。

我認為這里有很多解決方案,但如果可以的話,我就是為了打破手腕並走開。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM