发布后视图中未更新模型的表单值

时间:2013-11-08 15:21:11

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

我相信我在这里遗漏了一些相当微不足道的东西,但我没有发现它。我有一个Post方法,它修改了一个Model属性。然后,我希望该模型属性反映新的属性值。所以这是件:

控制器:

    [HttpPost]
    public ActionResult Index(HomeModel model)
    {

        ModelState.Clear(); //Didn't help
        model.MyValue = "Hello this is a different value";

        return View(model);

    }

型号:

public class HomeModel
{
    [Display(Name = "My Message")]
    public string MyValue { get; set; }

}

查看:

@model MyApp.Models.HomeModel
@{
   ViewBag.Title = "My MVC App";
   Layout = "~/Views/Shared/_Layout.cshtml";
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title></title>
</head>
<body>
   <div>
      @using (Html.BeginForm("Index", "Home"))
      {
         <h5>Hello</h5> 
         <input id="SendMessage" type="submit" value="Send Message"/> 
         @Html.LabelFor(m => m.MyValue)
      }

   </div>
</body>
</html>

当我调试控制器时,我可以看到更新的模型,但我的LabelFor始终具有Display属性,而不是"Hello this is a different value"提供的值。我在这里遗漏的是这个标签没有更新?

3 个答案:

答案 0 :(得分:4)

@Html.LabelFor会显示您的媒体资源名称(或DisplayAttribute中定义的名称),而@Html.DisplayFor会显示您的媒体资源内容。如果您希望显示"Hello this is a different value",请将@Html.LabelFor替换为@Html.DisplayFor

答案 1 :(得分:2)

html帮助器在绑定其值然后在模型中时会查看ModelState

因此,如果您打算修改控制器操作中的任何POSTed值,请确保首先将其从模型状态中删除:

 ModelState.Remove("PropertyName");

阅读此MVC 3 - Html.EditorFor seems to cache old values after $.ajax call

答案 2 :(得分:1)

这是LabelFor的目的,显示属性名称。使用EditorFor或直接在label标记中访问模型属性,将其添加到您的视图中

     <h5>Hello</h5> 
     <input id="SendMessage" type="submit" value="Send Message"/> 
     <label>@Model.MyValue</label>