3

次の例では、tel入力「Contract」の値を取得できません。DropDownListに問題はありません。

aspxコード:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
                DataKeyNames="Serial,Model" DataSourceID="ObjectDataSource1" Width="50%" GridLines="None" CellSpacing="-1">
                    <Columns>
                        <asp:BoundField DataField="Serial" HeaderText="Serial" />
                        <asp:BoundField DataField="Model" HeaderText="Model"/>
                        <asp:TemplateField HeaderText="Status">
                        <ItemTemplate>
                            <asp:DropDownList ID="Status" CssClass="dropdownlist" runat="server" onfocus="setSelectedRow(this)" DataValueField="Status" SelectedValue='<%# Bind("Status") %>' onChange="statusChange(this)">
                                <asp:ListItem Value="RENT READY">Rent Ready</asp:ListItem>
                                <asp:ListItem Value="ON RENT">On Rent</asp:ListItem>
                                <asp:ListItem Value="OOS">Out of Service</asp:ListItem>
                            </asp:DropDownList>                               
                            <input type="tel" id="Contract" onfocus="setSelectedRow(this)" value= '<%# Eval("Contract") %>' placeholder="Contract #" class='<%# (string)Eval("Status") == "ON RENT" ? "textBox" : "textBoxHidden" %>'></input>
                        </ItemTemplate>
                    </asp:TemplateField>
</asp:GridView>

レンダリングされたHTML:

ここに画像の説明を入力してください

私がこれまでに試したこと:

protected void submit_Click(object sender, EventArgs e)
{
   if (!Page.IsValid) return;
   foreach(GridViewRow row in GridView1.Rows)
   {
      string Serial = row.Cells[0].Text;
      string Model = row.Cells[1].Text;
      string Status = ((DropDownList)row.FindControl("Status")).SelectedValue;
      string Contract =  Any one of the below attempts...

      Sql stored procedure integrating the data back to the server...
   }
}

 string Contract = ((HtmlInputControl)row.FindControl("Contract")).Value;

 string Contract = ((HtmlInputText)row.FindControl("Contract")).Value;

 string Contract = ((TextBox)row.FindControl("Contract")).Text;

すべてがオブジェクト参照がオブジェクトのインスタンス例外に設定されていないことをスローします。

4

2 に答える 2

2

次のように入力を変更します:runat="server"属性を追加します

ファイルtype = "text"での使用aspx

 <input type="text" runat="server" id="Contract" onfocus="setSelectedRow(this)" value= '<%#   
     Eval("Contract") %>' placeholder="Contract #" class='<%# (string)Eval("Status") == "ON  
     RENT" ? "textBox" : "textBoxHidden" %>' ></input>

次に、このようなイベントtype = "tel"でGridRowsが作成されたときのコードビハインドでに 変更しますOnRowCreated

    protected void GridView1_RowCreated(object sender, GridViewRowEventArgs {
        if (e.Row.RowType == DataControlRowType.DataRow)
            ((HtmlInputText)(e.Row.FindControl("Contract")))
                .Attributes.Add("type", "tel");
    }  

入力値を取得するには、これを使用します

string Contract = ((HtmlInputText)row.FindControl("Contract")).Value;
于 2012-06-11T18:37:13.293 に答える
0
  1. runat="server"サーバー側でHTML入力コントロールにアクセスするには追加する必要があります
  2. value属性には符号がなく、=レンダリングされたhtmlでは空です
  3. /レンダリングされたHTMLに終了タグはありません

レンダリングされた入力タグ:

<input type="tel" id="Contract" onfocus="setSelectedRow(this)" value placeholder="Contract #" class="textBoxHidden">

次のようなものが必要です。

<input type="text" id="Contract" runat="server" onfocus="setSelectedRow(this)" value='<%# (string)Eval("Contract") == "" ? "" : Eval("Contract") %>' placeholder="Contract #" class='<%# (string)Eval("Status") == "ON RENT" ? "textBox" : "textBoxHidden" %>' />

valueそれでも属性がレンダリングされたhtmlのサインインに失敗する場合=は、その値をダミーのtelに設定してみてください。

value='<%# (string)Eval("Contract") == "" ? "0" : Eval("Contract") %>'
于 2012-06-11T19:33:46.540 に答える