Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / AjaxControlToolkit Raiting / 25 сообщений из 30, страница 1 из 2
29.09.2011, 10:23:32
    #37460333
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
Привет всем. Попробовал вставить в интернет-магазин рейтинг к каждому из товаров.
http://www.asp.net/ajaxlibrary/AjaxControlToolkitSampleSite/rating/rating.aspx

Если втавить статически к одному товару, то всё работает:
Код: plaintext
1.
2.
3.
4.
5.
<asp:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server">
                </asp:ToolkitScriptManager>
                <asp:Rating ID="ThaiRating" runat="server" CurrentRating="2" MaxRating="5" StarCssClass="ratingStar"
                    WaitingStarCssClass="savedRatingStar" FilledStarCssClass="filledRatingStar" EmptyStarCssClass="emptyRatingStar" 
                    RatingAlign="Vertical" RatingDirection="RightToLeftBottomToTop"/>
                <div id="Product" runat="server">

Но если вставлять к каждому из товаров рейтинг динамически:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Hardware = new Table();
row = new TableRow();
                    cell = new TableCell();
                    AjaxControlToolkit.Rating r = new AjaxControlToolkit.Rating();
                    r.Attributes.Add("id", item.ID.ToString());                    
                    r.Attributes.Add("CurrentRating", "2");
                    r.Attributes.Add("MaxRating", "5");
                    r.Attributes.Add("StarCssClass", "ratingStar");
                    r.Attributes.Add("WaitingStarCssClass", "savedRatingStar");
                    r.Attributes.Add("FilledStarCssClass", "filledRatingStar");
                    r.Attributes.Add("EmptyStarCssClass", "emptyRatingStar");
                    r.Attributes.Add("RatingAlign", "Vertical");
                    r.Attributes.Add("RatingDirection", "RightToLeftBottomToTop");
                    cell.Controls.Add(r); 
                    cell.Controls.Add(label);
                    row.Cells.Add(cell);
                    Hardware.Controls.Add(row);

то выдаёт такую ошибку:
Multiple controls with the same ID '_ClientState' were found. FindControl requires that controls have unique IDs.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: Multiple controls with the same ID '_ClientState' were found. FindControl requires that controls have unique IDs.

у них на форуме
http://ajaxcontroltoolkit.codeplex.com/workitem/15455
человек ответил, что у него то же самое в новой версии, но в старой всё работало исправно.

Хотя тут
http://support.microsoft.com/kb/834608
я нашёл (в самом низу), что такая проблема существует и решается с помощью класса
PartialCachingControl, т.е. я дописал:
Код: plaintext
1.
2.
3.
if (((PartialCachingControl)r).CachedControl != null)
                    {
                        cell.Controls.Add(r);
                    }
но это решением проблемы не стало.

Скажите - можно ли как-то динамически создавать ajax toolkit-овский рейтинг или нет?
...
Рейтинг: 0 / 0
29.09.2011, 10:54:54
    #37460403
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
Я конечно дико извиняюся за надоедливость, но почему бы не использовать репитер/гридвью/листвью...
...
Рейтинг: 0 / 0
29.09.2011, 11:09:20
    #37460440
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
Если использовать гридвью вместо таблицы, то toolkit raiting будет работать?
...
Рейтинг: 0 / 0
29.09.2011, 11:10:22
    #37460447
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
я в ACT не спец, но по идее должен
...
Рейтинг: 0 / 0
29.09.2011, 13:37:02
    #37460931
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
Сделал как вы сказали - вместо table поставил gridview:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
[System.ComponentModel.DataObject]
        public class Tablist
        {
            public string  name_n {get;set;}
            public string name_org {get;set;}
            public string street {get;set;}            
        }

        public List<Tablist> GetTablists()
        {
            List<Tablist> result = new List<Tablist>();            
            result.Add(new Tablist() { name_n = "name_test", name_org = "test_org", street = "sovetskaya" });
            result.Add(new Tablist() { name_n = "name_test2", name_org = "test_org2", street = "sovetskaya2" });

            return result;
        }

        protected void Page_Load(object sender, EventArgs e)
        {      
                GridView Hardware = new GridView();                
                Hardware.AllowPaging = true;
                Hardware.PageSize=15;
                Hardware.CssClass = "hard";
                Hardware.AutoGenerateColumns=true;
                Hardware.EnableViewState = false;

                Hardware.DataSource = GetTablists();
                Hardware.DataBind();
                Product.Controls.Add(Hardware);
            }

Каким тогда образом можно вставить AjaxControlToolkit.Rating?
...
Рейтинг: 0 / 0
29.09.2011, 13:42:44
    #37460954
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
Вроде как с вашим гридвью всё намного сложнее, чем с обычной таблицей
...
Рейтинг: 0 / 0
29.09.2011, 13:46:27
    #37460973
Zoria
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
гридвью вам предложили не для того чтобы вы и его добавляли динамически на страницу. в чем глубокий смысл?
...
Рейтинг: 0 / 0
29.09.2011, 13:53:22
    #37461000
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
а, понял. так бы сразу и сказали. Я подумал, что так же, как и таблицу - динамически.
Сейчас попробую сделать всё в html
...
Рейтинг: 0 / 0
29.09.2011, 14:44:14
    #37461200
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
Сделал как вы сказали:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
                    ConnectionString="<%$ ConnectionStrings:shopConnectionString %>" 
                    SelectCommand="SELECT * FROM [Processor]"></asp:SqlDataSource>
                <asp:GridView ID="OperationHistoryList" runat="server" DataSourceID="SqlDataSource1"
                    AllowPaging="True" PageSize="15" CssClass="data" AutoGenerateColumns="False"
                    EnableViewState="False">
                    <Columns>                        
                        <asp:BoundField DataField="Name" />
                        <asp:BoundField DataField="Price" />                        
                    </Columns>
                </asp:GridView>

Каким образом теперь можно в гридвью вставить к каждому товару рейтинг?

внутрь <Columns> вставлять:
Код: plaintext
1.
2.
<asp:Rating ID="ThaiRating" runat="server" CurrentRating="2" MaxRating="5" StarCssClass="ratingStar"
                    WaitingStarCssClass="savedRatingStar" FilledStarCssClass="filledRatingStar" EmptyStarCssClass="emptyRatingStar"
                    RatingAlign="Vertical" RatingDirection="RightToLeftBottomToTop" />
нельзя
...
Рейтинг: 0 / 0
29.09.2011, 14:48:48
    #37461208
Zoria
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
Studentsвнутрь <Columns> вставлять:
Код: plaintext
<asp:Rating />
нельзя
почему?
...
Рейтинг: 0 / 0
29.09.2011, 14:51:24
    #37461213
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
...
Рейтинг: 0 / 0
29.09.2011, 14:54:49
    #37461223
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
Получается, что только динамически можно. Но тогда появляется ошибка, которую я описал в самом начале.
...
Рейтинг: 0 / 0
29.09.2011, 14:58:47
    #37461239
Zoria
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
ну давайте посмотрим, что говорит нам на тему gridview.columns, msdn....

http://msdn.microsoft.com/ru-ru/library/system.web.ui.webcontrols.gridview.columns(VS.90).aspx

и после это обратим внимание на templatefield
...
Рейтинг: 0 / 0
29.09.2011, 14:59:16
    #37461240
Zoria
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
StudentsПолучается, что только динамически можно.
железная логика.
...
Рейтинг: 0 / 0
29.09.2011, 15:07:31
    #37461269
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
спасибо. Про TemplateField раньше ничего не знал
...
Рейтинг: 0 / 0
29.09.2011, 15:21:06
    #37461323
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
а можно ли вставить изображение? ведь нужно знать ID.
В С# я мог написать:
Код: plaintext
1.
2.
3.
4.
im = new Image();
                    im.Style["margin"] = "0 auto";                    
                    im.CssClass = "photos";
                    im.ImageUrl = "photos/proc/"+item.ID.ToString()+".jpg";
                    cell.Controls.Add(im);

а через html можно как-то вставить изображение?
или можно в эту гридвью столбик с изображением добавить динамически через C#, а остальное всё статически сделать?
...
Рейтинг: 0 / 0
29.09.2011, 15:24:18
    #37461330
Zoria
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
...
Рейтинг: 0 / 0
29.09.2011, 17:30:30
    #37461683
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
Zoria, скажите, можно ли как-то при формировании этого гридвью передавать ячейке атрибуты. Мне нужно, чтобы знать, какой товар я добавил в корзину (см. рисунок).
И для того, чтобы при нажатии на товар открылось модальное окно этого товара, но для этого мне нужно знать ID
...
Рейтинг: 0 / 0
29.09.2011, 17:33:12
    #37461686
Паганель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
Разместите там HiddenField
...
Рейтинг: 0 / 0
29.09.2011, 17:35:01
    #37461691
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
Например, в С# при создании таблицы для передачи ID я мог написать:
Код: plaintext
cell.Attributes.Add("id",item.ID.ToString())

Или же для того, чтобы именно та ячейка, в которой название:
Код: plaintext
cell.Attributes.Add("class","point")

Код: plaintext
1.
2.
3.
.point
{
    cursor: pointer
}

А как таоке можно реализовать в html? ведь gridview я статически создал
...
Рейтинг: 0 / 0
29.09.2011, 17:53:25
    #37461732
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
У BoundField есть свойство DataField - заполняет данными из БД.
А у HiddenField есть аналогичное? я на msdn не нашёл.

попробовал написать вот так:
Код: plaintext
1.
2.
3.
4.
5.
<asp:TemplateField HeaderImageUrl="photos/basket.gif">
                                <ItemTemplate>
                                    <asp:HiddenField ID="hf" runat="server" Value="ID" />
                                    <asp:CheckBox ID="CheckBox1" runat="server" />
                                </ItemTemplate>
                            </asp:TemplateField>
но в value он подставляет не текущий ID товара, а просто слово "ID"
...
Рейтинг: 0 / 0
29.09.2011, 17:59:22
    #37461745
няка
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
...
Рейтинг: 0 / 0
30.09.2011, 10:43:37
    #37462382
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
Получается вот такой код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    <script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {            
            ArrayList ProductList = new ArrayList();
            ProductList.Add(new Product("ID", ID));
            
            ListRepeater.DataSource = ProductList;
            ListRepeater.DataBind();
        }
</script>

http://msdn.microsoft.com/ru-ru/library/wzht0517.aspx%5Dhttp://msdn.microsoft.com/ru-ru/library/wzht0517.aspx]http://msdn.microsoft.com/ru-ru/library/wzht0517.aspx]http://msdn.microsoft.com/ru-ru/library/wzht0517.aspx
здесь написано, что используется "пользовательский класс Product".
'Computer.Processor.Product' is a 'field' but is used like a 'type'

строковое свойство Model и числовое свойство UnitPrice - это будет как строковое свойство ID и числовое свойство "значение ID". Правильно?
...
Рейтинг: 0 / 0
30.09.2011, 10:55:55
    #37462420
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
а, всё разобрался. там чуть ниже было напсиано. Не увидел просто
...
Рейтинг: 0 / 0
30.09.2011, 11:08:58
    #37462459
Students
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
AjaxControlToolkit Raiting
написал в Product.cs:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
string _ID;    

    public Product(string ID)
    {
        _ID = ID;
    }
    
    public string ID
    {
        get { return _ID; }
        set { _ID = value; }
    } 

в Processor.aspx:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<script runat="server">
        protected void Page_Load(object sender, EventArgs e)
        {
            // Create and populate an ArrayList to store the products.
            ArrayList ProductList = new ArrayList();
            ProductList.Add(new Product("ID"));

            // Bind the array list to Repeater
            ListRepeater.DataSource = ProductList;
            ListRepeater.DataBind();
        }
</script>

непонятным остаётся только - куда вставлять конструкцию:
Код: plaintext
1.
<asp:Repeater id="ListRepeater" runat="server">
</asp:Repeater>

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:shopConnectionString %>"
                        SelectCommand="SELECT * FROM [Processor]"></asp:SqlDataSource>
                    <asp:GridView ID="MainGrid" runat="server" DataSourceID="SqlDataSource1" AllowPaging="True"
                        PageSize="15" CssClass="gr" AutoGenerateColumns="False" EnableViewState="False">
                        <Columns>                        
                            <asp:Repeater id="ListRepeater" runat="server">
                                <asp:TemplateField>
                                    <itemtemplate>
                                    <asp:Rating ID="ThaiRating" runat="server" CurrentRating="2" MaxRating="5" StarCssClass="ratingStar"
                                        WaitingStarCssClass="savedRatingStar" FilledStarCssClass="filledRatingStar" EmptyStarCssClass="emptyRatingStar"
                                        RatingAlign="Vertical" RatingDirection="RightToLeftBottomToTop" />
                                </itemtemplate>
                                </asp:TemplateField>
                                <asp:ImageField DataImageUrlField="ID" DataImageUrlFormatString="~\photos\proc\{0}.jpg"
                                    AlternateText="No Photo" NullDisplayText="No image on file." HeaderText="Фото"
                                    ReadOnly="true" />
                                <asp:BoundField DataField="Name" HeaderText="Название" SortExpression="Name">
                                    <controlstyle width="150px" height="100px" />
                                    <itemstyle width="150px" height="100px" />
                                    <headerstyle width="150px" height="100px" />
                                </asp:BoundField>
                                <asp:BoundField DataField="Price" HeaderText="Цена" SortExpression="Price">
                                    <controlstyle width="70px" height="100px" />
                                    <itemstyle width="70px" height="100px" />
                                    <headerstyle width="70px" height="100px" />
                                </asp:BoundField>
                                <asp:TemplateField HeaderImageUrl="photos/basket.gif">
                                    <itemtemplate>
                                    <asp:HiddenField ID="hf" runat="server"  />
                                    <asp:CheckBox ID="CheckBox1" runat="server" />
                                </itemtemplate>
                                </asp:TemplateField>
                            </asp:Repeater>
                        </Columns>
                    </asp:GridView>

т.к. появляется ошибка
System.Web.UI.WebControls.DataControlFieldCollection must have items of type 'System.Web.UI.WebControls.DataControlField'. 'asp:Repeater' is of type 'System.Web.UI.WebControls.Repeater'.
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / AjaxControlToolkit Raiting / 25 сообщений из 30, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]