#c# #asp.net
#c# #asp.net
Вопрос:
Я пытаюсь сделать всю строку GridView ссылкой, и я думаю, что у меня это получилось, но я столкнулся с проблемой. Как вы можете видеть ниже, все данные моих строк запросов поступают из БД, теперь я хочу добавить строку запроса, которая не поступает из БД, как я могу это сделать??
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string Types = Request.QueryString["Type"].ToString();
string Rounds = Request.QueryString["Rounds"].ToString();
string Groups = Request.QueryString["Groups"].ToString();
string Id = DataBinder.Eval(e.Row.DataItem, "Id").ToString();
string League = DataBinder.Eval(e.Row.DataItem, "League").ToString();
string Team1 = DataBinder.Eval(e.Row.DataItem, "Team1").ToString();
string Team2 = DataBinder.Eval(e.Row.DataItem, "Team2").ToString();
string Type = DataBinder.Eval(e.Row.DataItem, "TType").ToString();
string Location = ResolveUrl("Update_Match.aspx" "?Id=" Id "amp;Team1=" Team1 "amp;Team2=" Team2 "amp;League=" League "amp;Type=" Type "amp;Types=" Types "amp;Rounds=" Rounds "amp;Groups=" Groups);
e.Row.Attributes["onClick"] = string.Format("javascript:window.location='{0}';", Location);
e.Row.Style["cursor"] = "pointer";
}
}
Комментарии:
1. Откуда это тогда?
2. Просто для clarify…it похоже, вы ответили на вопрос, заданный в названии, и на самом деле спрашиваете, как вместо этого запутать строку запроса? Если это так, возможно, вы захотите изменить название.
3. @James, это то, что я хочу жестко запрограммировать в ссылке. Он не исходит из базы данных, например, Id и League берутся из полей таблицы, а Type, Rounds и Groups извлекаются из строки запроса с предыдущей страницы.
Ответ №1:
Я немного переписал это, чтобы попытаться лучше понять ваши вопросы. Это более подробно, чем вы могли бы хотеть, но это сделает его более понятным. Все, что вам нужно сделать, это создать строку запроса из нескольких элементов, некоторые из которых взяты из вашей базы данных, некоторые из вашей предыдущей страницы, а другие могут быть жестко запрограммированы. Все просто. Просто сначала присвойте каждой переменной в строке запроса ее значение, а затем создайте строку.
Например, предположим, что вы извлекаете название команды из базы данных, используя идентификатор, подобный этому:
String Team1 = db.Teams.Where(w => w.TeamID = TeamID).First().TeamName;
и вы устанавливаете тип как жестко заданное значение:
Int type = 0;
Когда вы закончите создавать свои переменные, просто соедините их вот так:
string QS = "Id=" ID.ToString();
QS = QS "amp;Team1=" Team1;
QS = QS "amp;Team2=" Team2;
QS = QS "amp;League=" League;
QS = QS "amp;Type=" Type.ToString();
QS = QS "amp;Types=" Types;
QS = QS "amp;Rounds=" Rounds.ToString();
QS = QS "amp;Groups=" amp; Groups.ToString();
e.Row.Cells[0].Visible = false;e.Row.Attributes.Add("onclick", "location='newpage.aspx?" sQueryString;
e.Row.Attributes.Add("style", "cursor:pointer;");
Не имеет значения, как вы получаете каждое значение, если они преобразуются в строки для построения строки запроса. Есть ли что-то еще, чего мне не хватает?
Комментарии:
1. Конечно, как вы можете видеть, некоторые поля в ссылке взяты из таблицы в БД, но мне также нужно добавить некоторые данные в ссылку, которые не поступают из БД. Тип, раунды и группы — это значения, перенесенные с предыдущей страницы. Эта ссылка выглядит так: ?Types= Lamp; Rounds= 0amp; Groups= 6 Теперь я хочу взять это и добавить в RowDataBound, и я хочу, чтобы это выглядело так: ?Id= 36amp;Team1= США amp;Team2= Англия amp; League= Нетamp;Type= 2amp;Types= L amp; Rounds= 0amp; Groups = 6 Надеюсь, это имеет смысл
2. Я не уверен, что вы что-то упускаете или я. Вы можете создать строку запроса из любого количества строковых значений, полученных любым удобным для вас способом. Я скорректировал свой ответ, чтобы лучше его проиллюстрировать, но если вам нужно что-то еще, пожалуйста, попробуйте сформулировать это.
Ответ №2:
Похоже, ваш код должен работать. Вы получаете какие-либо ошибки скрипта при попытке загрузить страницу?
Кроме того, в каком браузере вы это тестируете?
Для начала я бы попробовал сделать «c» в нижнем регистре onClick.
В дополнение к этому я бы подумал о том, чтобы немного пересмотреть ваш код, потому что кажется, что вы будете уязвимы для атаки межсайтового скриптинга, потому что вы не очищаете строку запроса перед тем, как поместить ее в атрибут.
Злоумышленник может воспользоваться этим, изменив строку запроса страницы, чтобы сказать:
http://www.yourpage.com/index.aspx?otherQueryString=3amp;Groups=<script>window.alert("Hello XSS!!");</script>
Комментарии:
1. -1 Это дает много общих советов, но вообще не отвечает на вопрос.