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

ModelState验证失败时,如何保留并返回来自Visa Type页面的VisaTypeId?

解决ModelState验证失败后丢失VisaTypeId的问题

方法1:用隐藏字段保留VisaTypeId

在「User Add」视图的表单内部,添加一个隐藏输入框,把Get方法传入的VisaTypeId存进去,这样提交表单时会自动把这个Id传给Post接口:

<input type="hidden" name="visaTypeId" value="@ViewBag.Id" />

接着在Post方法返回视图前,把收到的visaTypeId重新赋值给ViewBag,保证页面能正常获取:

[HttpPost]
public async Task<IActionResult> AddUser(UserModel userModel, string uniqueUser, int visaTypeId)
{
    // ... 原有业务逻辑 ...

    // 返回视图前重新设置ViewBag
    ViewBag.Id = visaTypeId;
    return View(userModel);
}

方法2:将VisaTypeId整合进UserModel

如果允许修改UserModel,直接给它新增一个VisaTypeId属性:

public class UserModel
{
    // ... 原有属性 ...
    public int VisaTypeId { get; set; }
}

在Get方法里把值赋给模型,视图里用强类型绑定的隐藏字段:

@Html.HiddenFor(m => m.VisaTypeId)

Post方法里就不用单独接收visaTypeId参数,直接从userModel中读取即可:

[HttpPost]
public async Task<IActionResult> AddUser(UserModel userModel, string uniqueUser)
{
    int visaTypeId = userModel.VisaTypeId;
    // ... 原有业务逻辑 ...

    // 返回视图时模型自带VisaTypeId,页面可直接调用Model.VisaTypeId
    return View(userModel);
}

方法3:用TempData临时存储

不想修改视图或模型的话,可以用TempData临时保存VisaTypeId。先在Get方法里存入:

[HttpGet]
public IActionResult AddUser(int visaTypeId)
{
    TempData["VisaTypeId"] = visaTypeId;
    // ... 原有逻辑 ...
}

然后在Post方法里读取,并且返回视图前重新存入一次(因为TempData读取后会自动失效):

[HttpPost]
public async Task<IActionResult> AddUser(UserModel userModel, string uniqueUser)
{
    int visaTypeId = (int)TempData["VisaTypeId"];
    TempData["VisaTypeId"] = visaTypeId; // 重新存储,确保返回视图时能拿到

    // ... 原有业务逻辑 ...

    ViewBag.Id = visaTypeId;
    return View(userModel);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:48:21