Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net MVC模型未更新_Asp.net_Asp.net Mvc_Asp.net Mvc 3_Model Binding - Fatal编程技术网

Asp.net MVC模型未更新

Asp.net MVC模型未更新,asp.net,asp.net-mvc,asp.net-mvc-3,model-binding,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Model Binding,模型: 类地址 { 公共字符串City{get;set;} 公共字符串Zip{get;set;} } 控制器: [HttpPost] 公共操作结果GetAddress(地址模型) { 如果(!String.IsNullOrEmpty(model.Zip)) { model.City=GetCityByZip(model.Zip); } 返回视图(模型); } 视图: @LabelFor(model=>model.City) @Html.TextBoxFor(model=>model.Cit

模型

类地址
{
公共字符串City{get;set;}
公共字符串Zip{get;set;}
}
控制器

[HttpPost]
公共操作结果GetAddress(地址模型)
{
如果(!String.IsNullOrEmpty(model.Zip))
{
model.City=GetCityByZip(model.Zip);
}
返回视图(模型);
}
视图


@LabelFor(model=>model.City)
@Html.TextBoxFor(model=>model.City)
@Html.ValidationMessageFor(model=>model.City)
@LabelFor(model=>model.Zip)
@Html.TextBoxFor(model=>model.Zip)
@Html.ValidationMessageFor(model=>model.Zip)

问题是,无论何时城市被修改,它都不会反映在视图上。在调试过程中,
model.City
包含正确的值,但未显示在视图中。即使像
@Html.TextBoxFor(model=>model.City)
这样简单的东西也不会显示正确的
model.City
值。

HtmlHelpers在更新和返回模型时从模型状态而不是模型中获取模型值。为了更新和返回模型,请在post方法中添加以下代码行:

ModelState.Clear();
或者您可以在ModelState本身中设置city的值:

ModelState["City"].Value = GetCityByZip(model.Zip);

正如Tommy所指出的,这是一种有点违反直觉的正确行为,因为在post上提交的表单数据在将数据绑定到返回的视图时具有第一优先级。这是有意义的,因为用户在重新返回同一视图时可能会出现验证错误,恢复表单条目时不会出现在恢复页面时丢失表单输入的问题

另一个选项是手动插入输入值

因此,与此相反

@Html.TextBoxFor(model=>model.City)
改为这样做


*这将直接从模型中获取值

甚至更好


*注意:这不会引入
数据val
属性。如果要在此属性上使用它们进行客户端验证,则需要

额外资源

您发布的模型与作为参数传递的模型不同。您引用了错误的模型吗?@MarkOreta:更新了问题,添加了view@Tommy我的错。类名是个错误。我刚刚更新了问题。我只是为了提问而重新命名这个班级,这是有道理的。所有版本的MVC都是这样吗?据我所知,是的。modelstate告诉视图有效/无效属性等信息。这必须在愚人节实现。。。谢谢(只看了两个小时我的服务器端和客户端代码。我应该早点开始谷歌搜索…@ChristianGollhardt-去过那里的人。这是我遇到的那些“特征”之一,由于失去了时间,我永远不会忘记:)经过近两天的思考,我终于发现了这一点。非常感谢!