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

提交表单后如何保留复选框及下拉选项的选中状态?

提交表单后保留复选框与下拉选项的选中状态

1. 用ViewModel统一管理表单数据

建议先创建一个ViewModel类封装所有表单字段,方便传递和维护状态:

public class CombinedFormViewModel
{
    public string[] CheckedBoxes { get; set; }
    public string SelectOption { get; set; }
    public string SelectOptionComp { get; set; }
    public string SelectOptionSer { get; set; }
    public string SelectOptionSoft { get; set; }
    public string SelectOptionApp { get; set; }
    // 可添加下拉选项数据源,比如公司类型列表
    public List<SelectListItem> CompanyTypeOptions { get; set; }
}

2. 修改控制器Action逻辑

把原方法的零散参数替换为ViewModel,处理完业务后将包含用户提交值的ViewModel返回视图:

public IActionResult CombinedForm(CombinedFormViewModel model)
{
    // 处理你的业务逻辑,比如筛选数据
    if (model.CheckedBoxes != null && model.CheckedBoxes.Any())
    {
        var filteredData = viewModel.Where(x => 
            model.CheckedBoxes.Any(type => x.Companies.company_type.Contains(type)));
        // 可将筛选结果存入ViewModel传递给视图
    }

    // 首次加载页面时设置初始选中状态
    if (model.CheckedBoxes == null)
    {
        model.CheckedBoxes = new[] { "Reseller", "SI" };
    }

    // 初始化下拉选项数据源(示例)
    model.CompanyTypeOptions = new List<SelectListItem>
    {
        new SelectListItem { Text = "企业客户", Value = "Enterprise" },
        new SelectListItem { Text = "个人客户", Value = "Personal" }
    };

    return View(model);
}

3. 调整视图代码,动态渲染选中状态

复选框部分

不再硬写checked属性,根据ViewModel中的值判断是否选中:

<label>
    <input type="checkbox" name="CheckedBoxes" value="Reseller" 
           @(Model.CheckedBoxes?.Contains("Reseller") == true ? "checked" : "") />
    <span>Reseller</span>
</label>

<label>
    <input type="checkbox" name="CheckedBoxes" value="SI" 
           @(Model.CheckedBoxes?.Contains("SI") == true ? "checked" : "") />
    <span>SI</span>
</label>

下拉选项部分

推荐用ASP.NET Core Tag Helper自动匹配选中项,也可以手动判断:

方法1:Tag Helper(更简洁)
<select asp-for="SelectOptionComp" asp-items="Model.CompanyTypeOptions"></select>

Tag Helper会自动根据Model.SelectOptionComp的值设置对应选项为选中状态。

方法2:手动生成选项
<select name="SelectOptionComp">
    <option value="Enterprise" @(Model.SelectOptionComp == "Enterprise" ? "selected" : "")>企业客户</option>
    <option value="Personal" @(Model.SelectOptionComp == "Personal" ? "selected" : "")>个人客户</option>
</select>

核心逻辑说明

  • 本质是把用户提交的选中值通过ViewModel回传给视图,视图根据这些值动态渲染选中状态。
  • 首次加载时要给ViewModel的CheckedBoxes设置初始值,保证页面默认选中状态正确。
  • 相比用ViewData/ViewBag传递状态,ViewModel的方式更清晰、易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:06:05