【问题标题】:ASP.NET c# Rating control - making it one time rating and fixedASP.NET c# 评级控制 - 使其一次性评级并修复
【发布时间】:2015-03-28 16:26:57
【问题描述】:

我正在尝试按照此示例让用户对他们参加的研讨会进行评分:

http://www.aspsnippets.com/Articles/Using-ASPNet-AJAX-Rating-Control-inside-GridView-TemplateField-ItemTemplate.aspx

如何让用户只对评分进行一次评分并显示用户评分?我不想让用户多次更改自己的评分。

谢谢!

【问题讨论】:

    标签: c# asp.net asp.net-ajax ajaxcontroltoolkit


    【解决方案1】:

    在 Fruit_Rating 表中,您必须添加 UserId

    FruitId | Rating | UserId
    

    在插入评分之前,您必须查询UserId 是否已经对该Fruit 进行评分,如果是,则跳过,否则进行插入。

    伪鳕鱼如下所示。

    var currentRating = GetFruit_RatingBy(RatingId and UserId);
    if(currentRating == null) {
         currentRating = new Fruit_Rating(FruitId, newRating, UserId);
         Insert(currentRating);
    }
    

    如果您希望该单元格为只读,您可以覆盖 RowDataBound 事件并在那里为 readonly 编写逻辑。

    【讨论】:

    • 一旦用户对特定行进行评分,是否有任何方法可以将评分转换为只读(无法填充任何星号)?
    • @ags 如果不希望用户更改他们的评分,您可以使用更新删除部分,我只为插入更新我的代码。
    • @ags 我认为从 gridview 只读特定单元格有点困难,最简单的方法是让代码保持原样并跳过代码中的更新部分。
    【解决方案2】:

    您需要在评级表中运行选择查询并对照UserID 进行检查

    查询:SELECT Rating FROM FRUIT_RATING WHERE UserID = @userID

    将其放入 DataTable 并检查 DataTable 是否包含 dt.Rows.Count 的任何行并检查它是否是 >0 ,即是否会有用户对水果进行评分,然后是 @987654328 @table 将有一个条目,因此您可以通过更改它的 CSS 类来禁用文本框,为此您可以轻松找到 here

    AND如果表中没有dt.Rows.Count == 0 的条目,则在表中创建一个条目。

    我建议您使用asp:Repeater 控件,因为在其中查找控件更容易并且与asp:GridView 控件非常相似。您可以通过以下方式在Repeater中找到一个控件:

    TextBox txtBox = (TextBox)rptr.Items[i].FindControl("txtRating");
    

    然后改变它的CSS类:

    txtBox.CssClass = "disabled-input";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多