【问题标题】:Asp.net server side Conditional attribute or unchecked attribute?Asp.net 服务器端条件属性还是未选中属性?
【发布时间】:2009-11-21 00:00:07
【问题描述】:

我有以下aspx代码:

  <% foreach (ModelDefect modelDefect in GetCodes())
  {%>
<tr>
    <td><input disabled="disabled" name="<%= modelDefect.Code %>" value="<%= modelDefect.Code %>" type="checkbox" checked="<%=modelDefect.CompletedDate.HasValue? "checked":string.Empty %>" /></td>
    <td><a href="javascript:submitForm('<%= modelDefect.DefectId %>');"><%= modelDefect.Code %></a></td>   
    <td><%= modelDefect.Description %></td><td><%= modelDefect.AddedDate %></td>
</tr>
<% } %>

如果有一个完整的日期,我希望复选框被选中,如果没有,则取消选中。 W3 似乎没有说明如何不选中它,但包含该属性。我看不到有条件地在项目上包含该属性的方法。我发现一个页面表明checked="yes" 或checked="no" 应该可以工作,但它没有。我想要一个独立于浏览器和基于标准的解决方案,或者......一种干净的方法来有条件地在我的 asp 上添加标签服务器端,它是 Ajax 友好的? (据我了解,Response.Write 在 Asp.net AJax 中不起作用。)

【问题讨论】:

    标签: asp.net html checkbox


    【解决方案1】:

    编写一个可以进行单元测试和重用的辅助方法:

    public static string GetCheckedAttribute(DateTime? value)
    {
        return value.HasValue ? "checked=\"checked\"" : string.Empty;
    }
    

    并在您的页面中调用它:

    <input disabled="disabled" 
           name="<%= modelDefect.Code %>" 
           value="<%= modelDefect.Code %>" 
           type="checkbox" 
           <%= GetCheckedAttribute(modelDefect.CompletedDate) %>
    />
    

    【讨论】:

    • 啊。多么简单,我觉得这很明显。
    • 您的辅助方法不应该采用DateTime? 我猜CompletedDate 是DateTime? 而不是bool?
    【解决方案2】:

    获取属性并将其作为条件输出的一部分,这应该适合你

     <input disabled="disabled" 
            name="<%= modelDefect.Code %>" 
            value="<%= modelDefect.Code %>" 
            type="checkbox" 
            <%=modelDefect.CompletedDate.HasValue? "checked=checked":string.Empty %>"
      />
    

    【讨论】:

    • 另一个简单的解决方案,我恳求生病是我未能提出其中任何一个的原因。此外,我的 VS2008 让我感到困惑,整个 &lt;% %&gt; 块显示为红色,就好像在某处没有未关闭的 " 一样。
    猜你喜欢
    • 1970-01-01
    • 2011-07-13
    • 2014-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-05
    • 2014-07-04
    相关资源
    最近更新 更多