Brian Liang
Brian Liang

Reputation: 7774

How do you pass a Container.DataItem as a parameter?

I'm using a repeater control and I'm trying to pass a parameter as such:

<%# SomeFunction( DataBinder.Eval(Container.DataItem, "Id") ) %>

It's basically calling:

public string SomeFunction(long id) {

    return "Hello";        

}

I'm not able to achieve this as I get an error:

error CS1502: The best overloaded method match ... SomeFunction(long id) ... has some invalid arguments.

Any ideas?

Upvotes: 9

Views: 11558

Answers (3)

Michael
Michael

Reputation: 339

I used this with success. The data source is a List collection.

OnClientClick='<%# "return myFunction(\""+ Container.DataItem + "\");" %>'

and the javascript function...

function myFunction(imgPath)
{
    alert(imgPath);
}

Upvotes: 1

Kieron
Kieron

Reputation: 27107

You need to cast the result to a long, so:

<%# SomeFunction( (long)DataBinder.Eval(Container.DataItem, "Id") ) %>

The alternative is to do something like this:

<%# SomeFunction(Container.DataItem) %>

and...

public string SomeFunction(object dataItem) {
    var typedDataItem = (TYPED_DATA_ITEM_TYPE)dataItem;

    // DO STUFF HERE WITH THE TYPED DATA ITEM

    return "Hello";        

}

This at least allows you to work with multiple values from the data item (DataRows etc).

Upvotes: 11

wcm
wcm

Reputation: 9281

I think you should cast the DataBinder.Eval(Container.DataItem, "Id") as long.

Upvotes: 2

Related Questions