2

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

控制器:

    [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"。我在这里缺少什么,这个标签没有更新?

4

3 回答 3

4

@Html.LabelFor显示您的属性名称(或在您的 中定义的名称DisplayAttribute),而@Html.DisplayFor显示您的属性内容。如果您想要"Hello this is a different value"显示,请替换@Html.LabelFor@Html.DisplayFor

于 2013-11-08T15:24:12.473 回答
3

html 助手在ModelState绑定它们的值时查看,然后在模型中查看。

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

 ModelState.Remove("PropertyName");

阅读此MVC 3 - Html.EditorFor 似乎在 $.ajax 调用后缓存旧值

于 2013-11-08T15:24:12.070 回答
1

这就是 的目的LabelFor,显示属性名称。使用EditorFor或直接在label标签内访问模型属性到您的视图

     <h5>Hello</h5> 
     <input id="SendMessage" type="submit" value="Send Message"/> 
     <label>@Model.MyValue</label>
于 2013-11-08T15:24:10.343 回答