Добавить AutoPostBack в RadioButton в Gridview, который вставляется как литерал

70
3

У меня есть gridview с столбцом RadioButton, который я создаю в соответствии со следующей статьей:


http://www.asp.net/data-access/tutorials/adding-a-gridview-column-of-radio-buttons-cs


Код сетки:


<asp:GridView ID="gvCounts" runat="server" Width="400px" AutoGenerateColumns="false"
cssClass="Grid" OnRowCreated="gvCounts_RowCreated">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<asp:Literal ID="RadioButtonMarkup" runat="server"></asp:Literal>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField DataField="Category" HeaderText="Category" />
<asp:BoundField DataField="Subcategory" HeaderText="Subcategory" />
<asp:BoundField DataField="Count" HeaderText="Count" />
</Columns>
</asp:GridView>

И внутренний код:


 protected void gvCounts_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Literal output = (Literal)e.Row.FindControl("RadioButtonMarkup");
output.Text = string.Format(@"<input type='radio' name='CategoryGroup' id='RowSelector{0}' value='{0}' />", e.Row.RowIndex);
}
}

Однако - я хочу, чтобы форма Post Post каждый раз при изменении переключателя, а не нажатие кнопки "отправить".


Поскольку переключатели здесь не являются .net-элементами управления, но стандартными переключателями HTML, я не уверен, как я могу это сделать.

спросил(а) 2011-02-21T16:22:00+03:00 9 лет, 8 месяцев назад
1
Решение
81

У меня была одна и та же проблема (и я использовал один и тот же учебник). Если вы используете jquery, мое решение может сработать для вас. В rowCreated function у меня есть следующее:


int index = e.Row.RowIndex;
Literal output = (Literal)e.Row.FindControl("RadioButtonMarkip");
output.Text=string.Format("<input type=\"radio\" name=\"Default_Group\" " + "id=\"RowSelector{0}\" value=\"{0}\" ", e.Row.RowIndex);

//check radio button if selected before
if (DefaultSeletectedIndex == e.Row.RowIndex || (!Page.IsPostBack && e.Row.RowIndex==0))
{
output.Text += "checked=\"checked\"";
}

output.Text += "onclick = \"jQuery.fn.post_Default("+index+")\" />";


Затем на стороне JS:

<script type="text/javascript">
jQuery.fn.post_Default=function(){
$.post("YourPage.aspx", {Default: arguments[0]});
};
</script>

Теперь вам нужно только загрузить страницу, чтобы проверить Request.Form [ "Default" ] для значения индекса вашего зарегистрированного переключателя. Это может быть не самый элегантный способ сделать это, но пока это работает. Я также играю с идеей просто использовать функцию jquery $.ajax для этого. Я думаю, что это может быть немного чище, но пока это работает.

ответил(а) 2011-02-23T01:54:00+03:00 9 лет, 8 месяцев назад
42

Код за:



protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
gvCounts.DataSource = new SupplierRepository().GetSupplierList();
gvCounts.DataBind();
}
else
{
string targetCtrl = Request.Params.Get("__EVENTTARGET");

**// your method, do exactly what button click did
ShowDetails();**
}
}
protected void gvCounts_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
Literal output = (Literal)e.Row.FindControl("RadioButtonMarkup");
output.Text = string.Format("<input type='radio' name='CategoryGroup' onclick='__doPostBack(\"RowSelector{0}\",\"\")' id='RowSelector{0}' value='{0}' />", e.Row.RowIndex);
}
}

ответил(а) 2011-02-23T06:18:00+03:00 9 лет, 8 месяцев назад
41

Переключатель asp.net отображается в браузере следующим образом:


<input id="RadioButton1" type="radio" name="RadioButton1" value="RadioButton1" onclick="javascript:setTimeout('__doPostBack(\'RadioButton1\',\'\')', 0)" />

Все, что вам нужно сделать, это повторить его.:)

ответил(а) 2011-02-21T16:29:00+03:00 9 лет, 8 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема