【问题标题】:MVC4 TextBoxFor overwritting model propertyMVC4 TextBox用于覆盖模型属性
【发布时间】:2012-10-03 20:23:23
【问题描述】:

假设我有一个模型:

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 来调用操作,文本框将显示值 15 而不是 49。MVC 将忽略我在操作中设置的 ID 属性,并使用查询中的那个。

考虑到这种行为没有记录在案,我觉得这很奇怪。

这方面有什么好的cmet吗?

【问题讨论】:

  • 你能列出视图的代码吗?否则,我们只能猜测您是如何使用您的模型的。此外,您在问题标题中使用了 MVC4,但问题被标记为 MVC3(尽管它不是特定于任何一个)。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    代替

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

    用途:

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

    看看这是否为您提供了您正在寻找的功能。

    【讨论】:

      【解决方案3】:

      这是一个常见问题,并且在不同的地方都有记录。一个很好的例子在这里:

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

      【讨论】:

        猜你喜欢
        • 2014-04-17
        • 1970-01-01
        • 2014-10-06
        • 1970-01-01
        • 2013-04-05
        • 1970-01-01
        • 1970-01-01
        • 2013-07-19
        相关资源
        最近更新 更多