Я иногда использовал такое выражение: -
string a = null;
if((a = GetValue()) != null){
DoSomething();
}
Это хороший синтаксис для назначения других значений, отличных от нуля, и проверки его на булево выражение. Хотя имейте в виду, что крайняя скобка всегда будет запрашивать логическое выражение.
Другие отвечающие стороны нашли различные биты связанными с различными аспектами вопроса. мне удалось починить полное решение. я имею, копируют/вставляют relavent отрывки здесь.
Первое важное изменение является использованием asp:LinkButton, который позволяет как событие OnClientClick, которое предоставляет Вам прямой доступ к событию javascript OnClick:
<asp:repeater ID="itemsRepeater"
OnItemDataBound="itemsRepeater_ItemDataBound"
runat="Server">
<itemtemplate>
<tr>
<td>
<asp:HyperLink ID="linkView" runat="server"
Text="<%# GetItemText((Item)Container.DataItem) %>"
NavigateUrl="<%# GetViewItemUrl((Item)Container.DataItem) %>" />
</td>
<td>
<asp:LinkButton ID="linkImpregnate" runat="server"
Text="Impregnate"
OnClientClick="<%# GetImpregnateUrl((Item)Container.DataItem) %>" />
</td>
</tr>
</itemtemplate>
</asp:repeater>
Код - позади вручную создает код презентации (yay для разделения контроллера и представления!), который содержит вызов JavaScript.
protected string GetNodeAcknowledgementClientClick(Item item)
{
if (!(item is HotGirl))
return ""; //this shouldn't be called for non-acknowledgements, but i won't fail
HotGirl girl = (HotGirl)item;
String szOnClientClick =
"return ImpregnateGirl(this, "+
Toolkit.QuotedStr(girl.GirlGUID.ToString()) + ", "+
Toolkit.QuotedStr(GetItemName(item))+");";
return szOnClientClick;
}
И наконец в aspx, я нахожу, что случайное место делает пюре в некотором JavaScript:
<script type="text/javascript" src="Javascript/jquery.js"></script>
<script type="text/javascript">
//<![CDATA[
function DeleteItem(sender, girlGuid, girlName)
{
if (!confirm("Are you sure you want to impregnate "+girlName+"?"))
{
return false;
}
$.post(
'ImpregnateGirl.aspx?GirlGUID='+nodeGuid,
function(data, textStatus) {
if (textStatus == 'success')
{
$(sender).parents('tr:eq(0)').hide();
}
else
{
return false;
}
}
);
//return false to suppress the postback
return false;
}
//]]>
</script>
я заставил бы jQuery сделать сообщение как меры безопасности как предложенный парень, но jQuery дал бы ошибку вместо регистрации. Вместо того, чтобы заботиться я принял решение не заботиться.
jQuery может откопать теги для Вас:
$("[id$=linkDelete]").click(function() {
DeleteItem(this.href);
});
В том коде говорится, "находят все элементы DOM, идентификационные концы которых с 'linkDelete' и обеспечивают электричеством следующего обработчика события Click".
Я рекомендовал бы против реализации Удалить функции через ссылки таким образом. Удалите ссылки, угроза безопасности.
Скорее лучше потребовать сообщения к тому URL вместо этого. Если бы Вы хотите сделать ajax, я настоятельно рекомендовал бы использовать платформу JavaScript, таким образом, Вы не должны иметь дело с различиями в том, как различные браузеры реализуют XmlHttpRequests.
Например, в jQuery Вы могли сделать это как это:
$.post('Delete.aspx',{itemGuid:'{19a149db-5675-4eee-835d-3d78372ca6f9}'},
function(data, textStatus) {
if (textStatus == 'success') {
$(this).parents('tr:eq(0)').fadeOut();
}
});
который сделал бы и вызов ajax и эффект постепенного исчезновения, Вы хотите.
Вы могли затем получить доступ к гуиду объекта в Delete.aspx от Запроса. Форма ["itemGuid"], и это не было бы уязвимо для соединения нападений.
Предотвращение обратных передач
Сервер генерирует обратную передачу wireup, потому что Вы используете управление сервером. Используйте плоскость <a>
тег без runat ='server' директива.
Идентификационные данные строки таблицы
Я обычно делаю это путем привязки данных столбца ID некоторого вида и помещения этого в шаблон повторителя:
<tr id='<%#Eval("ID")%>'>
P.S. Я очень не хочу походить на фаната, но jQuery сделает все эти вещи порядком величины легче. Необходимо действительно рассмотреть это, если Вы можете. Иначе Вы собираетесь быть в мире вреда, пытающегося реализовать эти опции последовательным способом через браузеры.
P.P.S. Если бы Delete.aspx и подобные URL только будут названными из JavaScript, я рекомендовал бы использовать ashx http обработчики вместо этого. Можно сделать всю ту же логику сервера без бесполезных издержек полноценной страницы.
мой обычно выходит, будучи похож
<asp:LinkButton runat="server" OnClientClick='<%# Eval("ID", "DeleteItem(this, \"{0}\"); return false;") %>' Text="Delete" />
это сделает HTML, который похож
<a id="blah_blah_ctl01" onclick='DeleteItem(this, "{19a149db-5675-4eee-835d-3d78372ca6f9}"); return false;'>Delete</a>
Я включаю "эту" ссылку так, чтобы Вы могли иметь доступ к dom и удалить ссылку..., или это - родитель или что бы то ни было. Оттуда это является довольно прямым для использования jQuery, чтобы на самом деле сделать регистрацию и управление DOM. "Возвращают false"; отключает обратную передачу.