当文本框通过javascript更改客户端时,ASP.NET文本框在回发后丢失值

Jas*_*son 6 javascript asp.net

我通过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>
Run Code Online (Sandbox Code Playgroud)

此控件位于.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);
    }
}
Run Code Online (Sandbox Code Playgroud)

完成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;
}
Run Code Online (Sandbox Code Playgroud)

唯一的问题是当我刷新页面时,通过javascript设置客户端的CharacterNameTextBox和ClassNameLabel中的文本将丢失.

如何确保控件在回发之间保留其值?

Tim*_*ugh 9

刷新页面(按F5)与回发不同.我不相信文本框中的值会在刷新时回发到服务器.文本框中的值将在回发时回发到服务器(只要TextBox的ReadOnly属性未设置为true,但这是一个不同的故事).


小智 6

我认为如果文本框不可编辑:Enabled = False或ReadOnly = false.
Asp.net"出于安全原因"从其ViewState获取此文本框中的值.
这就是为什么当你使用像HiddenField或Input这样的东西时,你可以获得价值.