Xamarin中实现仅选中配送单选按钮时触发地址为空提示弹窗
解决单选按钮逻辑问题:仅在选中配送且地址为空时弹出提示
看起来你的问题出在下单触发的逻辑里——你没有先判断用户到底选的是自提还是配送,不管选啥只要地址空就弹提示,这就导致选自提的时候也会触发错误的提示。
咱们只需要在地址检查前加一层判断:确认用户选中的是配送模式,再去校验地址是否为空。这里给你两种可行的修改方案,选你顺手的来就行:
方案一:直接检查配送单选按钮的状态
这种方式最直接,能确保和UI上的选中状态完全一致:
private async void placeOrderTap_Tapped(object sender, EventArgs e) { try { // 只有选中配送模式时,才检查地址 if (DeliveryMode.IsChecked == true) { // 优化地址为空的判断逻辑,避免空引用风险 bool addressIsEmpty = string.IsNullOrEmpty(_cart.data.user_address) || _address_id == null || _address_id.ToString() == "0"; if (addressIsEmpty) { await DisplayAlert("Alert", Message.addressBlank, "Ok"); return; } } // 这里放你原本的下单逻辑,比如提交订单到后端等操作 } catch (Exception ex) { // 建议加上异常处理,方便排查问题 Console.WriteLine("下单过程出错: " + ex.Message); } }
方案二:用你定义的delivery_pickup变量判断
如果你更信任自己维护的状态变量,也可以用它来判断:
private async void placeOrderTap_Tapped(object sender, EventArgs e) { try { if (delivery_pickup == "delivery") { bool addressIsEmpty = string.IsNullOrEmpty(_cart.data.user_address) || _address_id == null || _address_id.ToString() == "0"; if (addressIsEmpty) { await DisplayAlert("Alert", Message.addressBlank, "Ok"); return; } } // 后续下单逻辑 } catch (Exception ex) { Console.WriteLine("下单过程出错: " + ex.Message); } }
额外小提示
- 注意
_address_id如果是null的话,直接调用ToString()会抛出空引用异常,所以我在判断里先加了_address_id == null的检查,比你原来的写法更安全。 - 确保你的单选按钮点击事件里的状态赋值是正确的,比如
PickupRadioButtonClick里确实把DeliveryMode.IsChecked设为了false,这样判断的时候才不会出错。
内容的提问来源于stack exchange,提问作者stoneshaq
相关产品推荐
相关产品推荐

