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

ASP.NET MVC提交表单时模型为null及URL参数丢失问题求助

问题解决:MVC表单提交模型为null及验证后Id丢失

一、模型提交为null的原因及修复

MVC的模型绑定依赖表单控件的name属性与模型属性名完全匹配,你的视图中所有输入控件的name都和模型属性不一致:

  • Ticker对应输入框name是Ticker_Box,模型属性是Ticker
  • TradeDirection对应输入框name是Trade_Direction,模型属性是TradeDirection
  • TradeDescription对应输入框name是Trade_Description,模型属性是TradeDescription

修复方案:使用强类型辅助方法生成输入控件

替换视图中的Html.TextBox为Html.TextBoxFor,自动匹配模型属性名,同时保留模型值:

修改后的视图表单部分:

@using (Html.BeginForm("Create", "TradeIdea", FormMethod.Post))
{
    <table align="center">
        <tr>
            <td align="center">
                @Html.LabelFor(m => m.Ticker)
                @Html.TextBoxFor(m => m.Ticker)
            </td>
        </tr>
        <tr>
            <td align="center">
                @Html.LabelFor(m => m.TradeDirection)
                @Html.TextBoxFor(m => m.TradeDirection)
            </td>
        </tr>
        <tr>
            <td align="center">
                @Html.LabelFor(m => m.TradeDescription)
                @Html.TextBoxFor(m => m.TradeDescription)
            </td>
        </tr>
        <tr>
            <td align="center">
                <input type="submit" value="Submit Idea" id="btnSubmit" />
            </td>
        </tr>
    </table>
}

二、ModelState验证不通过时Id丢失的原因及修复

GET请求的Create方法需要Id参数,但你没有将这个Id传递到表单中,也没有在模型中保存该值。当验证不通过返回视图时,Id没有被携带,导致URL中丢失。

修复方案:将Id存入模型并通过隐藏字段提交

  1. 修改模型类,添加Id属性:
namespace StockCenter.Models
{
    public class CreateTradeIdeaModel
    {
        public int Id { get; set; } // 添加Id属性
        
        [Required]
        public string Ticker { get; set; }
        [Required]
        public string TradeDirection { get; set; }
        [Required]
        public string TradeDescription { get; set; }
    }
}
  1. 修改GET的Create方法,为模型赋值Id:
public ActionResult Create(int Id)
{
    //var dailyOptionRecord = new OptionHeaderService().GetById(Id);
    var model = new Models.CreateTradeIdeaModel();
    model.Id = Id; // 赋值Id
    model.Ticker = "something";
    return View(model);
}
  1. 修改视图,添加隐藏字段保存Id:
    在表单内添加(比如放在表格第一行或任意位置):
@Html.HiddenFor(m => m.Id)

修改后的完整视图:

@using Kendo.Mvc.UI
@model StockCenter.Models.CreateTradeIdeaModel

@{
    ViewBag.Title = "Create";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@using (Html.BeginForm("Create", "TradeIdea", FormMethod.Post))
{
    @Html.HiddenFor(m => m.Id) <!-- 添加隐藏字段 -->
    <table align="center">
        <tr>
            <td align="center">
                @Html.LabelFor(m => m.Ticker)
                @Html.TextBoxFor(m => m.Ticker)
            </td>
        </tr>
        <tr>
            <td align="center">
                @Html.LabelFor(m => m.TradeDirection)
                @Html.TextBoxFor(m => m.TradeDirection)
            </td>
        </tr>
        <tr>
            <td align="center">
                @Html.LabelFor(m => m.TradeDescription)
                @Html.TextBoxFor(m => m.TradeDescription)
            </td>
        </tr>
        <tr>
            <td align="center">
                <input type="submit" value="Submit Idea" id="btnSubmit" />
            </td>
        </tr>
    </table>
}

这样修改后,表单提交时模型会正确绑定,且验证不通过返回视图时,Id会通过隐藏字段保留,解决URL中Id丢失的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 13:08:10