2013-11-25 5 views
1

Я, вероятно, отвечу на свой вопрос до того, как закончу это сообщение, но на случай, если я не смогу здесь, с чем я сражаюсь.Получение значения из пользовательского элемента управления в asp.net

мне нужно, чтобы получить значение PhotoId из Club:ImageThumbnail управления:

<asp:FormView ID="fvPhpto" runat="server" DataKeyNames="id" 
    Width="480px" AllowPaging="True" 
    PagerSettings-Visible="false"> 
    <ItemTemplate> 
     <asp:Label Text='<%# Eval("title") %>' runat="server" ID="descriptionLabel" /> 
     <Club:ImageThumbnail ID="thumb1" runat="server" ImageSize="Large" PhotoID='<%# Eval("id") %>' /> 
    </ItemTemplate> 
    ... 

Такого рода вещи int id = (int)fvPhpto.FindControl("thumb1").PhotoID; не работает, как PHOTOID не будет отображаться в IntelliSence.

Это то, что код в Club:ImageThumbnail выглядит следующим образом:

public object PhotoID 
{ 
    get 
    { 
     object o = ViewState["PhotoID"]; 
     return (o != null) ? (int)o : 0; 
    } 
    set 
    { 
     ViewState["PhotoID"] = (value != null && value !=DBNull.Value) ? Convert.ToInt32(value) : 0;  
    } 
} 

public ImageSizes ImageSize 
{ 
    get 
    { 
     object o = ViewState["ImageSize"]; 
     return (o != null) ? (ImageSizes)o : ImageSizes.Thumb; 
    } 
    set 
    { 
     ViewState["ImageSize"] = value; 
    } 
} 

public enum ImageSizes 
{ 
    Large = 0, 
    Thumb = 1, 
    FullSize = 2 
} 

public string NoPhotoImg 
{ 
    get 
    { 
     object o = ViewState["NoPhotoImg"]; 
     return (o != null) ? (string)o : null; 
    } 
    set 
    { 
     ViewState["NoPhotoImg"] = value; 
    } 
} 

protected void Page_PreRender(object sender, System.EventArgs e) 
{ 
    if (Convert.ToInt32(PhotoID) == 0) 
    { 
     if (NoPhotoImg != null) 
     { 
      Image1.ImageUrl = NoPhotoImg; 
     } 
     else 
     { 
      Image1.Visible = false; 
     } 
    } 
    else 
    { 
     Image1.ImageUrl = "ImageFetch.ashx?Size=" + Convert.ToInt32(ImageSize) + "&ImageID=" + Convert.ToString(PhotoID); 
    } 
} 


<asp:Image ID="Image1" runat="server" CssClass="photo" BorderWidth="1" /> 

ответ

1

Вы должны приводиться к типу пользовательского элемента управления первым и затем int для значения ID фотографии, как это:

int id = (int)(fvPhpto.FindControl("thumb1") as ImageThumbnail).PhotoID; 

Возможно, проще и понятнее, если вы разделите броски на два этапа, сначала на пользовательский тип управления, а затем набросьте на int, как это:

ImageThumbnail theUserControl = fvPhpto.FindControl("thumb1") as ImageThumbnail; 

// Since the C# as operator returns null for a failed cast, then we need to 
// check that we actually have an object before we try to use it 
if(theUserControl != null) 
{ 
    int id = (int)theUserControl.PhotoID; 
} 

Примечание: Если ImageThumbnail не имя класса вашего пользовательского элемента управления, а затем изменить ImageThumbnail с именем имя класса вашего пользовательского элемента управления.

+0

Karl, спасибо за быстрый ответ. Работали как обаяние! – Risho

+0

@ Ришо - не проблема, удачи в кодировании. :-) –

Смежные вопросы