在MVC4中提交方法的空模型

时间:2013-11-13 12:41:33

标签: c# asp.net-mvc razor

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

型号:

 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

2 个答案:

答案 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)而不是字段。