TL; DR:如果您有一个与模型对象字段同名的Url参数,使用TextBoxFor(也使用HiddenFor测试),您将获得url参数值,而不是模型参数值,即使指定模型变量。我的问题是原因。
RouteConfig
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Test", action = "Index", id = UrlParameter.Optional }
);
TestModel
public class TestModel
{
public int Id { get; set; }
}
TestController (注意+5区分url参数和模型对象字段)
public ActionResult Index(int id)
{
var testModel = new TestModel { Id = id + 5 };
return View(testModel);
}
测试/索引视图
@model Solution.Models.TestModel
@Html.TextBoxFor(_ => _.Id) // Incorrectly shows 5
@Html.TextBoxFor(_ => Model.Id) // Incorrectly shows 5
@Html.TextBox("id", Model.Id) // Correctly shows 10
访问以下网址查看网站: /测试/索引/ 5
问题是TextBoxFor最终都是5,而TextBox最终为10.为什么这会有所不同?
假设与UrlParameter有一些奇怪的交互,我不明白为什么第二个TextBoxFor具有不正确的值,因为传递给视图的模型是专门引用的。为什么会这样?
感谢阅读。