Razor页面OnPost更新模型后输入框值未更新问题求助
问题:提交后BookB输入框未同步更新值
我定义了如下BookEntry类:
public class BookEntry { public string[] BookTypes { get; set; } = Array.Empty<string>(); public string BookA { get; set; } = string.Empty; public string BookB { get; set; } = string.Empty; }
在PageModel中创建了BookSearchModel:
public class BookSearchModel : PageModel { public void OnGet() {} [BindProperty] public BookEntry? bookEntry { get; set; } public IActionResult OnPostCopy() { if (bookEntry !=null) { bookEntry.BookB = bookEntry.BookA; } return Page(); } }
视图HTML代码:
<form asp-page-handler="copy" class="mb-3 mt-md-2" method="post"> <div class="row g-3"> <div class="col-md-6"> <label asp-for="bookEntry.BookA" class="form-label">Book A</label> <input asp-for="bookEntry.BookA" class="form-control" /> </div> <div class="col-md-6"> <label asp-for="bookEntry.BookB" class="form-label">Book B</label> <input asp-for="bookEntry.BookB" class="form-control" /> </div> </div> <button type="submit">Submit</button> <div class="row g-3"> <div>Result Book A: @Model.bookEntry!.BookA</div> <div>Result Book B: @Model.bookEntry!.BookB</div> </div> </form>
操作流程:在BookA输入框输入“apple”并点击提交,OnPostCopy方法正常触发,页面底部的div能显示“Result Book A: apple,Result Book B: apple”,但BookB的输入框值仍为空。请问这是什么原因?
原因分析
这是ASP.NET Core Razor Pages的ModelState优先渲染机制导致的:
- 表单提交时,BookB输入框的空值会被存入ModelState;
- 当你在
OnPostCopy中给bookEntry.BookB赋值后,返回Page()时,Razor渲染input标签会优先读取ModelState里的旧空值,而非Model中更新后的新值; - 页面底部直接输出
@Model.bookEntry!.BookB是直接读取Model属性,所以能显示正确值。
解决方法
在给bookEntry.BookB赋值后,清除ModelState中对应项的缓存,或者清空整个ModelState:
方法1:清除单个字段的ModelState
public IActionResult OnPostCopy() { if (bookEntry !=null) { bookEntry.BookB = bookEntry.BookA; // 清除BookB的ModelState缓存 ModelState.Remove(nameof(bookEntry.BookB)); } return Page(); }
方法2:清空整个ModelState
如果需要更新多个字段,直接清空所有ModelState缓存:
public IActionResult OnPostCopy() { if (bookEntry !=null) { bookEntry.BookB = bookEntry.BookA; // 清空所有ModelState缓存 ModelState.Clear(); } return Page(); }
修改后,渲染输入框时会读取Model中更新后的BookB值,输入框就能正常显示“apple”了。
内容的提问来源于stack exchange,提问作者Carrie Kaski
相关产品推荐
相关产品推荐

