【问题标题】:asp.net eval issueasp.net 评估问题
【发布时间】:2011-08-31 13:01:25
【问题描述】:

所以我有一个 asp.net 页面,其中转发器绑定到视图模型

我想根据当前行属性 CapAssignedToUserCode 是否与变量 currentUserCode 相同(查看 if 语句)来显示/隐藏 HTML 块

当前行中有一个属性 CapAssignedToUserCode 的值,如果我将 Eval("CapAssignedToUserCode") 硬编码为字符串,则一切正常

我基本上是想获取repeater的当前行并将属性CapAssignedToUserCode传递给函数commonCap.SameUserCode

<asp:Repeater ID="rptAnnualActionsAssigned" runat="server">
    <ItemTemplate>
        <div class="item">
            <asp:HiddenField ID="hdnCapItemId" runat="server" />
            <h4>
                <%#Eval("CategoryTitle")%>:
                <%#Eval("CategoryIndex")%></h4>
            <span class="status"><strong>Status: </strong>
                <%#Eval("CapAssignedStatus")%></span>
                <span class="status"><strong>Assigned To: </strong>
                <%#Eval("CapAssignedToFullname")%></span>
            <div class="noHighlightTable">
            usercode:<%#Eval("CapAssignedToUserCode")%>
                <%
                    if (showCompleteBtn || commonCap.SameUserCode(Eval("CapAssignedToUserCode").ToString(), currentUserCode))
                  {%>
                <a class="noHighlightBtn" onclick="OpenSPDialog('/_layouts/beim/CAPAction.aspx?capDataId=' + <%#Eval("CapDataId")%>, 'Complete Action')"
                    href="javascript:void(0);">Complete action</a>
                   <%
                  }%>

【问题讨论】:

    标签: asp.net webforms


    【解决方案1】:

    仅使用 Eval 来渲染字段,如果您想将字段数据传递给方法使用 Container.DataItem。

    所以你的代码应该是这样的:

    <%#
       if (showCompleteBtn || commonCap.SameUserCode((Container.DataItem as YourBindedType).CapAssignedToUserCode), currentUserCode))
    {%>
    

    【讨论】:

    • 我无法访问 Container 对象?任何想法
    • 你不会忘记 # 在 '
    【解决方案2】:

    内联调用方法。该方法具有您的逻辑/输出。

    <%# WhateverYourLogicIs( (bool) DataBinder.Eval(Container.DataItem,"CapAssignedToUserCode") ) %>
    

    还有其他几种方法,包括直接检查 eval。 签出:

    Conditional Logic in ASP.net page

    【讨论】:

    • 我无法访问 Container 对象?任何想法