mvc url参数覆盖视图中具有相同名称的模型对象字段

时间:2014-09-09 21:46:25

标签: asp.net-mvc asp.net-mvc-4

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具有不正确的值,因为传递给视图的模型是专门引用的。为什么会这样?

感谢阅读。

0 个答案:

没有答案