0

这很愚蠢,但我不知道该怎么做。我有以下类图:

模型:

 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

4

2 回答 2

3

改为定义Nameas 属性(甚至是自动属性,如果需要)。

于 2013-11-13T12:44:48.997 回答
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; }
}

原因是模型绑定器使用的是属性(具有公共设置器)而不是字段。

于 2013-11-13T12:44:45.287 回答