MVC模型没有更新

xar*_*xar 12 asp.net-mvc asp.net-mvc-3

该模型

class Address
{
    public string Street { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

控制器动作

[HttpPost]
public ActionResult GetAddress(Address model)
{
    if (!String.IsNullOrEmpty(model.Zip))
    {
        model.City = GetCityByZip(model.Zip);
    }
    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

风景

<div class="formrow">
    @Html.LabelFor(model => model.City)
    @Html.TextBoxFor(model => model.City) 
    @Html.ValidationMessageFor(model => model.City)
</div>
<div class="formrow"> 
    @Html.LabelFor(model => model.State)
    @Html.DropDownListFor(model => model.State, (IEnumerable<SelectListItem>)ViewBag.States, new { style = "width:217px;" }) 
    @Html.ValidationMessageFor(model => model.State) 
</div> 
<div class="formrow">
    @Html.LabelFor(model => model.Zip)
    @Html.TextBoxFor(model => model.Zip) 
    @Html.ValidationMessageFor(model => model.Zip)
</div>
Run Code Online (Sandbox Code Playgroud)

问题是每当城市被修改时,它都不会反映在视图上.在调试期间,model.City包含正确的值但它不会显示在视图上.即使是简单的事情@Html.TextBoxFor(model => model.City)也不能显示正确的model.City值.

Tom*_*mmy 27

当您更新并返回模型时,HtmlHelpers从模型状态而不是模型获取模型值.要更新并返回模型,请在post方法中添加以下代码行:

ModelState.Clear();
Run Code Online (Sandbox Code Playgroud)

或者您可以在ModelState中设置city的值:

ModelState["City"].Value = GetCityByZip(model.Zip);
Run Code Online (Sandbox Code Playgroud)

  • 这必须在Aprils Fools日实施......谢谢.(我的服务器端和客户端代码只看了2个小时.我应该早点开始google搜索...) (3认同)
  • @ChristianGollhardt - 去过那里的人。这是我遇到的“功能”之一,因为失去的时间而永远不会忘记:) (2认同)