这是MVC框架中的错误吗?

时间:2014-09-11 16:33:02

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

我发现了一些奇怪的行为,想知道是否有其他人遇到过它,如果我是愚蠢的或是否是一个错误。

何时和ID在URL中传递给页面以及具有ID属性的模型

视图为Model.Id

呈现不同的值

ViewModle示例

public int Id { get; set; } - value 2
....

控制器示例

    public ActionResult Index(int id)
    {
        // code

        return View(model);
    }

网址如下 - 活动/索引/ 1 - 网址ID = 1

如果我在我的视图中输入以下内容

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

<p>@Model.Id</P>

我得到以下输出

Textbox的值= 1

TextArea的值= 1 但是

的价值
<p> 

tag = 2 - 我在ViewModel中传入视图的ID

我通过将ViewModel中的Id字段重命名为TableId

来解决此问题

所以在我看来,传入url的Id被Textbox / Area用掉了,段落找到了传递给我的ViewModel的值。很奇怪

1 个答案:

答案 0 :(得分:2)

这种行为是设计的 - 尽管最初可能不直观。

内置的html助手优先使用它们来确定一个值 - ModelState(来自Url中的绑定)优先于模型值。

如果手动清除模型状态(例如在控制器中),您将看到渲染的值相同。

E.g。

ModelState.Clear(); //Clears all modelstate.(you can also be more specific 
                    //and only clear specified modelstate values.

另请参阅:ASP.NET MVC’s Html Helpers Render the Wrong Value!