我相信我在这里遗漏了一些相当微不足道的东西,但我没有发现它。我有一个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"
提供的值。我在这里遗漏的是这个标签没有更新?
答案 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>