Dinesh Ambaliya Ответов: 2

Как передать значение в функцию JavaScript в GridView в


Я связываю gridView в коде позади. Я хочу отображать имена контактов с помощью javascript в зависимости от установленных флажков.
<asp:TemplateField HeaderText="Select">
                        <ItemTemplate>
                            <asp:CheckBox ID="chkSelect" onchange='return checkUncheck(<%#Eval("ContactName") %>);'
                                Text='<%#Eval("ContactName") %>' runat="server" />
                        </ItemTemplate>
 </asp:TemplateField>


Функция Eval работает в текстовом свойстве и отображает имена контактов в значениях флажков. Но в checkUncheck () это не работает. В источнике страницы я могу найти этот аргумент в функции checkUncheck() :
onchange="return checkUncheck(&lt;%#Eval(&quot;ContactName&quot;) %>);"

2 Ответов

Рейтинг:
9

Sanjeev Alamuri

Попробуй вот так!!!

<asp:CheckBox ID="ChkAll" runat="server" Text='<%# Bind("ContactName") %>' OnClientClick='<%# string.Format("javascript:return checkUncheck(\"{0}\")", Eval("ContactName")) %>'>
</asp:CheckBox>


Рейтинг:
12

S. M. Ahasan Habib

ваша разметка должна немного измениться(комбинация одинарных и двойных кавычек). Внимательно следуйте следующей строке и узнайте, что вы пропустили.

<asp:CheckBox ID="chkSelect" onchange=<%# "javascript:checkUncheck('" + Eval("ContactName") + "')" %> Text='<%#Eval("ContactName") %>' runat="server" />


Разметка:
<asp:gridview runat="server" id="grdData" autogeneratecolumns="False" xmlns:asp="#unknown">
    <columns>
        <asp:boundfield runat="server" showheader="True" headertext="Id" datafield="Id" />
        <asp:templatefield headertext="Select">
             <ItemTemplate>
                <asp:CheckBox ID="chkSelect" onchange=<%# "javascript:checkUncheck('" + Eval("ContactName") + "')" %> Text='<%#Eval("ContactName") %>' runat="server" />
            </ItemTemplate>
        </asp:templatefield>
    </columns>
</asp:gridview>


модель данных:
public  class  Data
{
    public long Id { get; set; }
    public string ContactName { get; set; }

    public static IEnumerable<data> GetDataList()
    {
        return new[] { new Data { Id = 1, ContactName = "Habib" }, new Data { Id = 2, ContactName = "Khorshed" }, new Data { Id = 3, ContactName = "Shojol" } };
    }
}</data>


С фоновым кодом
protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
        LoadGrid();
}
private void LoadGrid()
{
    IEnumerable<data> data = Data.GetDataList();
    grdData.DataSource = data;
    grdData.DataBind();
}</data>


с АСП .чистая флажок событие onChange, после чего не будет работать. Если вы видите рендер html
<span  önchange="javascript:checkUncheck('Shojol')"><input id="MainContent_grdData_chkSelect_2" type="checkbox" name="ctl00$MainContent$grdData$ctl04$chkSelect" /><label for="MainContent_grdData_chkSelect_2">Shojol</label></span>

выше вы поймете, что он будет визуализировать span, а событие onchange будет перемещаться от флажка к span. В этом случае мое предложение заключается в том, что вы можете использовать событие onclick вместо onchange, и оно будет работать нормально.
Вы можете RND с этим, как вы можете создать 2 элемента управления на одной стороне сервера другой html и привязать javascript метод для обработчика событий onchange для обоих и увидеть результат.

<div>
        <asp:checkbox id="chkTest" runat="server" onchange="javascript:checkUncheck('Good Morning');" text="Click Me" />
        <input type="checkbox" id="chk3" onchange="javascript:checkUncheck('Good Morning');" value="Good Night"/>
    </div>

<script  type="text/javascript">
    function checkUncheck(contactName) {
        alert(contactName);
    }
</script>