日期:2014-05-17  浏览次数:20397 次

请教一个后台获取input type="button"的value的问题
前台代码:
C# code

<script language="JavaScript">
    $(document).ready(function () {
        $(".imgbutton").toggle(function () {
            $(this).removeClass("imgbutton").addClass("imgbutton2");
            $(this).attr("value","1");
        }, function () {
            $(this).removeClass("imgbutton2").addClass("imgbutton");
            $(this).attr("value","0");
        });
    });
    </script>

<body>
    <form id="form1" runat="server">
    <div>
      <input type="button" id="t1p1z11" runat="server" class="imgbutton" value="0">
      <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
    </div>
    </form>
</body>


后台代码:
C# code

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {

        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string b = this.t1p1z11.Value.ToString();
    }


怎么后台取到的Value一直是"0"啊?前台已经能改变Value的值。
分不够了,要是有哪位大哥能指点下,我另外上号给分!!

------解决方案--------------------
你要分析下这个状态不能保存是不是和Viewstate有关,用reflector查看htmlinputbutton源码,继承关系:
htmlinputbutton---->htmlinputcontrol---->htmlcontrol,htmlinputcontrol的value属性get自base.Attributes["value"],base就是htmlcontrol,Attributes在htmlcontrol中定义为public AttributeCollection Attributes,而AttributeCollection是靠一个类型为StateBag的_bag变量保存的,StateBag的数据全部保存在ViewState中,依靠LoadViewState方法加载。
----------------------------------------------------------

找到原因后就知道为什么获取不到value值了吧