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
相关产品推荐
相关产品推荐

