PDA

View Full Version : سوال: فراخوانی مستقیم متد در فایل aspx



A.S.Roma
یک شنبه 19 مهر 1388, 15:49 عصر
با سلام

من می خواهم به طور مستقیم مقدار Text یک Lable را با استفاده از فراخوانی یک متد تنظیم کنم . من از این Syntax استفده کردم :
<asp:Label ID="lblNumSelectedItem" runat="server" Text='<%#GetNumSelected()%>'></asp:Label>
فکر می کنم اسم این کد Reflective Code بود .
اما متاسفانه کار نمی کند .
ضمنا" متد هم با سطح دسترسی Public می باشد و دارای خروجی String است.

Chabok
سه شنبه 21 مهر 1388, 13:46 عصر
با سلام

چنین حالتی که شما میخواهید امکان پذیر نیست (یا حداقل من پیدا نکردم)

بلاک های کدی که در ASP.NET مجاز است اینهاست :

<%$ %>
<%# %>
<% %>
<%= %>
اولی یعنی <% $%> جهت استفاده از آیتم هایی مانند AppSettings و GlobalResources می باشد .

<asp:Label runat="server" Text="<%$ AppSettings:Key %>" />دومی یعنی <% #%> جهت Bind کردن مقادیر DataSource به کنترل استفاده میشه و هنگام صدا زدن متد DataBind کنترل این مقادیر جایگزین می شوند .

<%# Eval("Value") %>سومی که کد بلاک اصلی در ASP.NET محسوب میشه بدین صورت استفاده میشه :

<%
string message = "Hello World!";
Response.Write(message);
%>
و آخری یعنی <% =%> مانند Response.Write عمل می کند و عبارت داخل بلاک را چاپ می کند .
<%= String.Format("The title of this page is: {0}", this.Title ?? "n/a") %>

این آخری بیشتر به عملی که شما میخواهید انجام بدین شباهت داره . ولی مشکل اینجاس که در کنترل های Runat=Server نمیشه از چنین کد بلاکی استفاده کرد .

شما چند راه دارید :
1.کنترل Label نداشته باشید و مستقیماً عبارت را چاپ کنید .
2.در رویداد مناسبی مانند Page_Load متن مورد نظر خود را به Label نسبت دهید .
3....

موفق باشید .

Behrouz_Rad
سه شنبه 21 مهر 1388, 15:54 عصر
با سلام

من می خواهم به طور مستقیم مقدار Text یک Lable را با استفاده از فراخوانی یک متد تنظیم کنم . من از این Syntax استفده کردم :
<asp:Label ID="lblNumSelectedItem" runat="server" Text='<%#GetNumSelected()%>'></asp:Label>
فکر می کنم اسم این کد Reflective Code بود .
اما متاسفانه کار نمی کند .
ضمنا" متد هم با سطح دسترسی Public می باشد و دارای خروجی String است.
درست انجام دادی. فقط یک نکته رو فراموش کردی. متد DataBind کلاس Page رو در Page_Load فراخوانی نکردی. کاراکتر # مخصوص عملیات Binding هست و چون برای کنترلی عملیات فراخوانی متد رو انجام میدی که Binding رو ذاتاً پشتیبانی نمی کنه، هیچ داده ای در Label قرار نمی گیره:


protected void Page_Load(object sender, EventArgs e)
{
Page.DataBind();
}


موفق باشید.

persianspam
سه شنبه 21 مهر 1388, 16:53 عصر
تابع باید خروجی داشته باشه
یعنی تابع GetNumSelected باید به صورت زیر باشد .


public string GetNumSelected()
{
string Test = "Hello User";
return Test;
}