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

ASP.NET Core视图自动填充ViewModel的Id属性问题求助

ASP.NET Core视图自动填充ViewModel的Id属性问题求助

大家好,我最近在做ASP.NET Core项目时遇到一个奇怪的模型绑定问题,折腾了好久没搞明白,想请教下各位:

我的场景是这样的:从展示SetViewModel的页面点击按钮,跳转到新增单词的页面,需要把当前Set的Id传递过去——一来用于返回按钮的跳转,二来在新增单词时关联到这个Set上。

但现在的问题是:明明我在Get方法里只给WordViewModel的SetId赋值了,可是提交表单后,WordViewModel的Id属性也被自动填充成了和SetId一样的值,而我希望Id保持默认的0(因为新增的单词还没有Id,应该后续由系统生成)。

先给大家看一下相关代码:

主视图模型(SetViewModel)

// Primary view model
public class SetViewModel
{
    public int Id { get; set; }

    public string Name { get; set; } = null!;

    // Navigation property
    public List<Word>? Words { get; set; } = [];
}

主视图中的跳转按钮

从Set页面跳转到新增单词页面时,我通过路由传递了Set的Id:

<div class="float-end">
    <a asp-area="Sets" asp-controller="Home" asp-action="AddNewWord" asp-route-id="@Model.Id" type="button">
        Add new word
    </a>
</div>

新增单词的Get方法

这里我初始化WordViewModel时只给SetId赋值,Id保持默认的0:

public IActionResult AddNewWord(int id)
{
    if (id is 0)
        return NotFound();

    var wordVM = new WordViewModel { SetId = id };

    return View(wordVM);
}

单词视图模型(WordViewModel)

// Secondary view model
public class WordViewModel
{
    public int Id { get; set; }

    public string Name { get; set; } = "";
    public string Definition { get; set; } = "";
    public string ImagePath { get; set; } = "";

    // Navigation property
    public int SetId { get; set; }
}

新增单词的视图

视图里我只绑定了Name、Definition字段,提交按钮和返回按钮都用到了SetId:

@model WordViewModel

<form asp-action="AddNewWord" method="post">
    <div>
        <div>
            <h2>Create new word</h2>
            <hr />
        </div>

        <div>
            <input asp-for="Name">
        </div>

        <div>
            <input asp-for="Definition">
        </div>

        <div>
            <!-- 这里想让视图带上SetId用于提交 -->
            <div>
                <button asp-route-SetId="@Model.SetId" type="submit">Create word</button>
            </div>

            <!-- 返回按钮需要用到SetId,所以一开始就给它赋值了 -->
            <div class="col-6 col-md-3 m-auto">
                <a asp-area="Sets" asp-controller="Home" asp-action="SelectedSet" asp-route-id="@Model.SetId">Back</a>
            </div>
        </div>
    </div>
</form>

问题现象

在Get方法初始化后,WordViewModel的Id确实是0,但提交表单后,后端接收的WordViewModel里Id被填充成了和SetId一样的值,完全不符合预期。

有没有大佬知道这是哪里出问题了?怎么才能让Id不被自动填充,保持默认的0呢?

备注:内容来源于stack exchange,提问作者2033

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 11:59:51