You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Model计数为0时页面空白问题求助(ASP.NET MVC)

解决ASP.NET MVC中Model计数为0时页面空白问题

问题根源

页面空白的核心原因是Model为null时访问Model.Count抛出空引用异常,导致视图渲染失败。尽管API在无房产状态下返回count=0,但_hmoHelper.GetHMOPremisesAsync()可能返回了null而非空列表,使得视图中@if (Model.Count == 0)的判断触发异常,中断页面渲染。

解决方案

1. 在Controller层确保返回非null列表

修改Controller代码,将可能的null值替换为空列表:

[HttpGet("ConnectToMyHome")]
public async Task<ActionResult> ConnectToMyHome()
{
    try
    {
        var premises = await _hmoHelper.GetHMOPremisesAsync();
        // 若premises为null,返回空列表而非null
        return View(premises ?? new List<MyTNB.MyHome.Web.Areas.Application.Models.MyHomeChecklist.HMOPremisesViewModel>());
    }
    catch (Exception)
    {
        return RedirectToAction("Error", "Home");
    }
}

2. 在视图层增加null判断

直接在视图中先检查Model是否为null,再判断计数:

@model List<MyTNB.MyHome.Web.Areas.Application.Models.MyHomeChecklist.HMOPremisesViewModel>

<div class="px-md-5 px-4 mt-4">
    <div class="card-title-blue-20-16 mb-2 font-weight-bold">@Localizer.GetLocalizedString("HMO_ConnectToMyHome_MyPremises")</div>
</div>
@if (Model == null || Model.Count == 0)
{
    <!--#region No Premises Card-->
    <div class="container-fluid default-spacing-24 mt-md-3">
        <div class="block block--light br-xs-0">
            <div class="no-premise-icon">
                <img src="~/assets/img/hmo-connectmyhome-no-premise-icon.png" />
            </div>
            <div class="no-premise-text card-title-inverse-lighter">
            @Localizer.GetLocalizedString("HMO_ConnectToMyHome_NoPremise_Desc")
            </div>
        </div>
    </div>
    <!--#endregion No Premises Card-->
}
else
{
    <!-- 原有非空状态下的渲染代码 -->
    <div class="myhome-ul px-md-5 px-4 mb-2">
        <ul data-role="listview" id="tasks">
            <!--#region My Premises Card-->
            @foreach (var premise in Model)
            {
                <li class="mb-2">
                    <div class="wrapper" id="wrapper_@premise.PremisesID"
                            onmousedown="_taskCardMouseDown(event, @premise.PremisesID)"
                            onmouseup="_taskCardMouseUp(event, @premise.PremisesID)"
                            ontouchstart="_taskCardTouchStart(event, @premise.PremisesID)"
                            ontouchend="_taskCardTouchEnd(event, @premise.PremisesID)">
                        <div class="go" style="width:0%;"></div>
                        <div class="item" id="item_@premise.PremisesID">
                            <div class="block block--light block--cardShadow flex justify-content-between custom-radius mb-md-4 mb-2">
                                <div class="flex center">
                                    <div class="mr-3">
                                        <img src="~/assets/img/hmo-connectmyhome-home-icon.svg" />
                                    </div>
                                    <div>
                                        <div class="text-left task-description" onclick="MyPremise('@premise.PremisesID.ToString()','@premise.ApplicationType')">
                                            @premise.PremiseNickname
                                        </div>
                                    </div>
                                </div>
                            </div>
                        </div><div class="block block--light block--cardShadow flex justify-content-between edit" id="edit_@premise.PremisesID" onclick="EditPremise('@premise.PremisesID.ToString()','@premise.ApplicationType')"><img src="~/assets/img/edit-white.svg" /></div><div class="del block block--light block--cardShadow flex justify-content-between" id="del_@premise.PremisesID" onclick="openDelModal('@premise.PremisesID.ToString()')"><img class="" src="~/assets/img/delete-white.svg" /></div>
                    </div>
                </li>                              
            }
            <!--#endregion My Premises Card-->
        </ul>
    </div>
}

3. 优化Helper层返回逻辑

在GetHMOPremisesAsync方法中直接处理null值,确保返回始终是列表(空或有数据):

public async Task<List<HMOPremisesViewModel>> GetHMOPremisesAsync()
{
    var apiResponse = await _apiClient.GetAsync<GetHMOPremisesResponse>("your-api-endpoint");
    // 链式判断,避免null引用
    return apiResponse?.Content?.Premises ?? new List<HMOPremisesViewModel>();
}

内容的提问来源于stack exchange,提问作者Suraya Zulkifli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 03:42:15