2012-06-11 2 views
3

В следующем примере я не могу получить значение входного слова «Контракт». У меня нет проблем с DropDownList.Получить значение входа HTML внутри шаблонаField GridView

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:

enter image description here

То, что я пытался до сих пор:

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; 

Все бросить Ссылка на объект не указывает инстанции Исключение объекта.

+0

Вы пытаетесь захватить значение на загрузке страницы, rowdataound, обновление строки и т. Д.? – peroija

+0

Кнопка Нажмите. Я делаю foreach (строка GridViewRow в GridView1.Rows). – jmease

+0

можете ли вы опубликовать остальную часть кода для этого события? – peroija

ответ

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; 
+0

Спасибо, но я специально использовал вход «tel», чтобы вызвать цифровую клавиатуру на мобильных устройствах. Как бы это ни было важно, сайт используется исключительно на планшетах. – jmease

+0

Скомпилирован ли он с типом 'tel'? –

+0

Да. Я включил визуализированный HTML в OP, хотя он немного мал. – jmease

0
  1. Вам нужно добавить runat="server" контроля доступа ввода HTML на стороне сервера
  2. Атрибут value не имеет = знак и пусто в оказанной HTML
  3. Существует не закрывающий тег / in rendered 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 попробуйте установить его значение в некоторые фиктивные тела.

value='<%# (string)Eval("Contract") == "" ? "0" : Eval("Contract") %>' 
Смежные вопросы