Gridview RowCommand аргументы не проходят правильно в Safari
У меня есть страница asp с сеткой. Я также добавил клиентский скрипт в каждую связанную строку, чтобы выделить / не выделить ее при наведении курсора мыши. Я добавил asp:button в качестве поля шаблона и привязал значение к CommandArgument. В IE и FIrefox я получаю ожидаемое поведение, когда CommandName передается в событие _RowCommand. Однако, когда в Safari я только когда-либо вижу CommanName "Select", переданный в RowCommand.
Ожидаемое поведение заключается в том, что при щелчке по связанной строке параметр "Выбор" передается в событие RowCommand. При нажатии на кнопку в строке передается аргумент "Удалить".
protected void gvContacts_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
e.Row.Attributes.Add("onMouseOver", "Highlight(this)");
e.Row.Attributes.Add("onMouseOut", "UnHighlight(this)");
e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(gvContacts, "Select$" + e.Row.RowIndex);
e.Row.Attributes["style"] = "cursor:pointer";
}
}
protected void gvContacts_RowCommand(object sender, GridViewCommandEventArgs e)
{
switch (e.CommandName) //Always "Select" when browser is Safari.
{
case "Select":
Session["clientID"] = gvContacts.Rows[Convert.ToInt32(e.CommandArgument)].Cells[0].Text;
Response.Redirect("../Contacts/ContactEdit.aspx?readin=1");
break;
case "Remove":
//Remove the client from the list
Company company = new Company();
company.Get(Int32.Parse(Session["CompanyID"].ToString()), ((Model)Session["model"]).ConnectionString);
company.RemoveUser(Int32.Parse(e.CommandArgument.ToString()));
BindGrid(company.ID);
break;
}
}
HTML для itemtemplate
<asp:TemplateField>
<ItemTemplate>
<asp:Button ID="btnRemove" runat="server" Text="Remove" CommandName="Remove" OnClientClick="return confirmRemove();"
CommandArgument='<%# Eval("ID") %>' />
</ItemTemplate>
Любые мысли будут оценены. Спасибо
1 ответ
Я думаю, вы должны сначала проверить, что кнопка была нажата из какого браузера и если это было из сафари, чем изменить имя команды..
protected void gvContacts_RowCommand(object sender, GridViewCommandEventArgs e)
{
System.Web.HttpBrowserCapabilities browser = Request.Browser;
if(browser.Browser=="Safari") //Check The Browser
{
e.CommandName="Select";
}
switch (e.CommandName) //Always "Select" when browser is Safari.
{
case "Select":
Session["clientID"] = gvContacts.Rows[Convert.ToInt32(e.CommandArgument)].Cells[0].Text;
Response.Redirect("../Contacts/ContactEdit.aspx?readin=1");
break;
case "Remove":
//Remove the client from the list
Company company = new Company();
company.Get(Int32.Parse(Session["CompanyID"].ToString()), ((Model)Session["model"]).ConnectionString);
company.RemoveUser(Int32.Parse(e.CommandArgument.ToString()));
BindGrid(company.ID);
break;
}
}