【问题标题】:Get text/value from textbox after value/text changed server side在值/文本更改服务器端后从文本框中获取文本/值
【发布时间】:2015-12-31 09:52:45
【问题描述】:

我有一个 FormView 和我用 value='<%# Eval("Name") %>' 填充的数据(DataBind),但是在我更改 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    
}

【问题讨论】:

  • @Vova..当你点击提交按钮时,表单被发布并且在文本框中输入的新值丢失,来自服务器的值只会被反映
  • 您在您的网站中使用 JavaScript/jQuery 吗??

标签: c# asp.net .net


【解决方案1】:

在每个postback 中,您总是从数据库中获取旧值。解决方案是检查页面是否是第一次呈现 (!IsPostBack) 然后设置您的 MainFormTemplateDataSource 否则是否正在加载以响应回发 (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
}

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      如果是这种情况,那么您可以将赋值给 textbox 的代码包装在 if 块中,如下所示:

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

      希望对你有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多