这很愚蠢,但我不知道该怎么做。我有以下类图:
型号:
public class TKKService
{
public string Name = string.Empty;
public TKKService() {}
}
控制器:
public class ServiceController : Controller
{
public ActionResult Index()
{
return View(new TKKService());
}
[HttpPost]
public ActionResult Index(TKKService Mod)
{
TKKService serv = new TKKService();
if (ModelState.IsValid)
{
serv.Name = Mod.Name + "_next";
}
return View(serv);
}
}
查看:
@model TKK_Portal.Models.TKKService
@{
ViewBag.Title = "Index";
}
@using (Html.BeginForm())
{
@Model.Name
@Html.EditorFor(model=>model.Name)
<input type="submit" value="Wyslij"/>
}
执行Submit
方法时,Model.Name
不包含已编辑的数据。它采用默认值Empty
。
答案 0 :(得分:3)
将Name
定义为属性(如果需要,甚至是auto-property)。
答案 1 :(得分:2)
如果您打算在POST操作中修改其值,则需要将其从ModelState中删除:
ModelState.Remove("Name");
serv.Name = Mod.Name + "_next";
发生这种情况的原因源于Html助手的设计(如TextBoxFor,CheckBoxFor,......)。他们将首先在ModelState
中绑定它们的值,然后在模型中查看。在您的POST操作中,ModelState中已有一个值(最初提交的值),因此这是使用的值。
还要确保Name是属性而不是字段:
public class TKKService
{
public TKKService()
{
this.Name = string.Empty;
}
public string Name { get; set; }
}
之所以这样,是因为模型绑定器正在使用属性(具有公共setter)而不是字段。