在值/文本更改服务器端之后从文本框获取文本/值

时间:2015-12-31 09:52:45

标签: c# asp.net .net

我有FormView的数据(DataSourceDataBind),我填充了value='<%# Eval("Name") %>',但在我更改TextBox中的文字后并按下更新按钮我看到之前的相同值,我无法看到我输入的新值。

我在这里缺少什么?

我的HTML

<asp:FormView ID="MainFormTemplate" runat="server">  
    <ItemTemplate>
        <li class="li_result" runat="server">
            <div class="col-3">
                <input id="txt_Name"   runat="server"   value='<%# Eval("Name") %>'>
            </div>
        </li>
    </ItemTemplate>
</asp:FormView>
<asp:Button id="btn_Update" runat="server" OnClick="btn_Update_Click" Text="Update" />

服务器端

protected void Page_Load(object sender, EventArgs e)
{
    using (DB_MikaDataContext data = new DB_MikaDataContext())
    { 
        MainFormTemplate.DataSource = data.File_Projects.Where(x => x.Num_Tik.Equals("12")).ToList();
        MainFormTemplate.DataBind();             
    }        
}


public void btn_Update_Click(object sender, EventArgs e)
{      
    //using System.Web.UI.HtmlControls
    HtmlInputText twt = (HtmlInputText)MainFormTemplate.FindControl("txt_Name");
    string text = twt.Value;//i see old value ,not new one that i typed in text box    
}

3 个答案:

答案 0 :(得分:3)

在每个postback中,您总是从数据库中获取旧值。解决方案是检查页面是否第一次呈现( !IsPostBack ),然后设置MainFormTemplate&#39; s DataSource如果正在加载以回复回发( IsPostBack )获取txt_Name的值,如下所示:

HtmlInputText twt;

protected void Page_Load(object sender, EventArgs e)
{
      if (!IsPostBack)
      {
           using (DB_MikaDataContext data = new DB_MikaDataContext())
           { 
                MainFormTemplate.DataSource = data.File_Projects.Where(x => x.Num_Tik.Equals("12")).ToList();
                MainFormTemplate.DataBind();
           }
      }
      else 
      {
           twt = MainFormTemplate.FindControl("txt_Name") as HtmlInputText;
      }           
}

protected void btn_Update_OnClick(object sender, EventArgs e)
{
     string text = twt.Value; // You will get the new value
}

答案 1 :(得分:1)

Page_Load执行postback,您总是从数据库(?)写入值,并且从浏览器发送的值丢失(尽管仍然存在于Page.Request.Form成员中)。

答案 2 :(得分:1)

在ASP.NET中,提交页面时,Page_Load事件在按钮单击事件之前运行。因此,在click事件查看该值之前,textbox值将以其原始值重新填充。

如果是这种情况,那么您可以将if值赋值的代码包装到if块中的textbox

if (!IsPostBack)
{
    HtmlInputText twt = (HtmlInputText)MainFormTemplate.FindControl("txt_Name");
    string text = twt.Value;
}

希望这会对你有所帮助。