Repeater中的条件判断,以及嵌套判断if...else... .

本文介绍了在ASP.NET中使用Repeater控件进行数据绑定时增加判断的方法。主要涉及两种方式:一是使用DataBinder.Eval直接在页面上进行简单条件判断;二是通过前后端交互实现复杂逻辑处理,包括RadioButton的选择状态动态设置。
部署运行你感兴趣的模型镜像

同样遇到了在Repeater绑定数据过程中增加判断的问题,百度了一下,看了几篇文章,大有收获,遂整理后,结合自己的内容,加以发布,共同分享!

 

http://www.newasp.net/tech/asp/14018.html

 

http://space.cnblogs.com/question/9741/

 

http://www.z6688.com/info/34246-1.htm

 

执行判断总结起来有两种方式:

一种是

--<%# DataBinder.Eval(Container.DataItem, "[/"User_Answer/"]").ToString()!=""?"a":"b"%>

--适合简单判断,Yes Or NO

另一种是将数据发到后台处理

--引用http://space.cnblogs.com/question/9741/里面的内容

--前台代码

<asp:TemplateColumn HeaderText="性别">

<ItemTemplate>

<asp:RadioButton runat="server" Checked='<%# ReturnBool(Convert.ToString(DataBinder.Eval(Container.DataItem,"IsParty")))%>' GroupName="dang" Text="是"/>

</ItemTemplate>

</asp:TemplateColumn>

--后台代码

protected string ReturnBool(string str)

{

if(str== "1")

return true;

else

return false;

}

上面的在为RadioButton增加动态Id时会出问题, 不如使用<input type="radio">方便

下面是我的代码:

--前台

  --使用下面的后台方法输出<Input Radio>

 <%# CreateSelectRadio((DataRow)Container.DataItem) %>     

  --下面是Radio的Text                
 <%# DataBinder.Eval(Container.DataItem, "[/"Option_id/"]")%>.<%# DataBinder.Eval(Container.DataItem, "[/"Option_text/"]")%>    

--后台代码

-----里面增加了子数据行与父数据行之间的判断。

protected string CreateSelectRadio(DataRow dr)
    {
        DataRow drParent = dr.GetParentRow("rel_question");
        string sRadio = "<input type='radio'";
        sRadio += " id='radio" + dr["Question_id"].ToString() + "_" + dr["Option_id"].ToString() + "'";
        sRadio += " name='radio" + dr["Question_id"].ToString() + "'";
        if (dr["Option_id"].ToString() == drParent["User_Answer"].ToString())
            sRadio += " checked";
        sRadio += " onclick='setOptionValue(/"div" + dr["Question_id"].ToString() + "/",/"" + dr["Option_id"].ToString() + "/")'";
        sRadio += "/>";
        return sRadio;
    }

您可能感兴趣的与本文相关的镜像

ACE-Step

ACE-Step

音乐合成
ACE-Step

ACE-Step是由中国团队阶跃星辰(StepFun)与ACE Studio联手打造的开源音乐生成模型。 它拥有3.5B参数量,支持快速高质量生成、强可控性和易于拓展的特点。 最厉害的是,它可以生成多种语言的歌曲,包括但不限于中文、英文、日文等19种语言

java.lang.NullPointerException at com.htsc.service.AntiMoneyLaunderingService.getAdressType(AntiMoneyLaunderingService.java:246) at com.htsc.service.AntiMoneyLaunderingServiceTest.testGetAdressType(AntiMoneyLaunderingServiceTest.java:494) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268) at org.junit.runners.ParentRunner.run(ParentRunner.java:363) at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37) at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62) at org.junit.runner.JUnitCore.run(JUnitCore.java:137) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69) at com.intellij.rt.junit.IdeaTestRunner$Repeater$1.execute(IdeaTestRunner.java:38) at com.intellij.rt.execution.junit.TestsRepeater.repeat(TestsRepeater.java:11) at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:35) at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:231) at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:55)
最新发布
11-19
`java.lang.NullPointerException` 是 Java 中最常见的运行时异常之一,表示程序试图访问一个空对象的成员(如方法或属性)。根据你提供的堆栈信息: ``` at com.htsc.service.AntiMoneyLaunderingService.getAdressType(AntiMoneyLaunderingService.java:246) ``` 说明在 `AntiMoneyLaunderingService` 类的第 246 行发生了空指针异常。我们虽然没有看到源码,但可以根据常见的开发模式进行分析和修复。 --- ### 🔍 常见原因分析 假设 `getAdressType` 方法中类似如下代码: ```java String address = user.getAddress(); String type = address.trim(); // 如果 address 为 null,则此处抛出 NullPointerException ``` 或者: ```java if (user.getProfile().getCity().equals("Beijing")) { ... } // 链式调用容易出现中间某个环节为 null ``` --- ### ✅ 解决方案示例 以下是一个安全处理 `NullPointerException` 的 `getAdressType` 方法实现示例: ```java public class AntiMoneyLaunderingService { public String getAdressType(User user) { if (user == null) { return "UNKNOWN"; } String address = user.getAddress(); if (address == null || address.trim().isEmpty()) { return "MISSING_ADDRESS"; } // 示例逻辑:根据地址长度判断风险等级 if (address.length() < 10) { return "LOW_RISK"; } else if (address.contains("PO BOX") || address.contains("P.O. Box")) { return "HIGH_RISK"; } else { return "NORMAL"; } } } ``` #### 对应的测试类片段(避免 NPE): ```java @Test public void testGetAdressType() { AntiMoneyLaunderingService service = new AntiMoneyLaunderingService(); // 测试正常情况 User user1 = new User(); user1.setAddress("No. 10, Zhongguancun Street, Beijing"); assertEquals("NORMAL", service.getAdressType(user1)); // 测试 address 为 null 的情况 User user2 = new User(); user2.setAddress(null); assertEquals("MISSING_ADDRESS", service.getAdressType(user2)); // 测试 user 本身为 null 的情况 assertEquals("UNKNOWN", service.getAdressType(null)); } ``` --- ### 🛠️ 工具类推荐:使用 Optional 提高健壮性(Java 8+) ```java import java.util.Optional; public String getAdressTypeSafe(User user) { return Optional.ofNullable(user) .map(User::getAddress) .filter(addr -> !addr.trim().isEmpty()) .map(String::trim) .map(address -> { if (address.length() < 10) return "LOW_RISK"; if (address.toUpperCase().contains("PO BOX")) return "HIGH_RISK"; return "NORMAL"; }) .orElse("MISSING_OR_INVALID"); } ``` 这个版本更加函数式、简洁且避免了显式的 `null` 判断。 --- ### 💡 如何定位具体哪一行出错? 打开 `AntiMoneyLaunderingService.java` 文件,跳转到第 **246 行**,检查是否有如下行为: - 调用了 `xxx.toString()`, `xxx.equals()`, `xxx.hashCode()` 等方法; - 访问了 `.length()`, `.charAt()`, `.split()` 等字符串操作; - 链式调用如 `obj.getA().getB().getC()` —— 很可能其中某一步是 `null`。 建议使用 IDE(如 IntelliJ IDEA)调试该测试方法,观察变量状态。 --- ### ✅ 最佳实践总结 | 措施 | 说明 | |------|------| | ✅ 永远对入参做非空校验 | 特别是服务层方法 | | ✅ 使用 `Optional` 避免深层嵌套判断 | | ✅ 单元测试覆盖 `null` 输入场景 | 防止回归错误 | | ✅ 使用注解辅助静态检查 | 如 `@NonNull`, `@Nullable`(配合 Lombok 或 Jetbrains 注解) | 例如: ```java import org.jetbrains.annotations.Nullable; public String getAdressType(@Nullable User user) { ... } ``` --- ### ❓相关问题: 1. 如何使用 @NonNull 注解配合编译器提前发现潜在的空指针问题? 2. Java 中 Optional 的优缺点是什么?什么时候不该用它? 3. 如何通过单元测试全面覆盖 null 场景以防止 NullPointerException? 4. 如何使用 lombok 的 @Data 和 @NonNull 组合来减少空指针风险?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值