MVC 4 TextBoxFor覆盖模型属性

时间:2012-10-03 20:23:23

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

说我有一个模特:

public MyClass
{
    public int Id {get;set;}
    public string Name {get;set;}
    public int ContentId {get;set;}
}

我们假设我访问控制器的动作:

[HttpGet]
public ActionResult Create(int id)
{
    MyClass mc = new MyClass();
    mc.Id = 49;
    mc.ContentId = id;
    mc.Name = "Sample";
    return View("Create", mc);
}

“创建”视图是使用MyClass强类型的,它有助手@ Html.TextBoxFor(x => x.Id)。

如果我通过调用MyController / Create?id = 15来调用action,则textbox将显示值15而不是49.MVC将忽略我在操作中设置的ID属性,并使用查询中的ID属性。

我认为这种情况很奇怪,因为这种行为无法记录。

对此有何好的评论?

3 个答案:

答案 0 :(得分:7)

在行动开始时使用ModelState.Clear()

答案 1 :(得分:1)

而不是

@Html.TextBoxFor(x => x.Id)

使用:

@Html.TextBoxFor(x => Model.Id)

看看它是否能为您提供所需的功能。

答案 2 :(得分:1)

这是一个常见问题,并记录在各个地方。这是一个很好的例子:

http://blogs.msdn.com/b/simonince/archive/2010/05/05/asp-net-mvc-s-html-helpers-render-the-wrong-value.aspx