MVC3将基类传递给部分视图-提交表单仅具有父类值

问题描述

|| 我有许多从基本viewmodel类继承的子viewmodel类。 我将我的孩子viewmodel传递给我的View,然后将其自身传递给局部视图。 主视图采用子类型,而局部视图采用父类型。 当我手动填充属性时,一切都会正确显示。 但是,当我提交表单时,我的控制器操作仅具有Child类的属性-没有完成任何基类属性? 例如
public abstract class BaseDetails
    {
        public string Name { get; set; }

        public BaseDetails()
        { }

        public BaseDetails(string name)
        {
            Name = name;
        }
    }

    public class LocalDetails:BaseDetails
    {
        public int Visits { get; set; }

        public LocalDetails()
        { }

        public LocalDetails(int visits,string name)
            :base(name)
        {
            Visits = visits;
        }
    }
使用View就像:
@using (Html.BeginForm())
{
    @Html.TextBoxFor(m => m.Visits)
    <br />
    @Html.Partial(\"Name\",Model)
    <input id=\"Submit1\" type=\"submit\" value=\"submit\" />
}
部分视图上只有一个文本框。 在IE中:ViewSource显示表单标签位于两个tetxBoxes周围。 但是,当我提交控制器方法时:
[HttpPost]
public ActionResult EditLocal (LocalDetails model)
是否正确填充了model.Visits,但model.Name为空? 有任何想法吗? 我向类添加了无参数的构造函数,因为如果没有提交,则会在提交时出现异常。     

解决方法

        无法复制。对我来说很好。注意,我没有在视图模型中使用任何构造函数,因为模型绑定器将无法调用它们,并且所有属性必须具有公共getter和setter。 模型:
public abstract class BaseDetails
{
    public string Name { get; set; }
}

public class LocalDetails : BaseDetails
{
    public int Visits { get; set; }
}
控制器:
public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new LocalDetails());
    }

    [HttpPost]
    public ActionResult Index(LocalDetails model)
    {
        return View(model);
    }
}
查看(
~/Views/Home/Index.cshtml
):
@model LocalDetails
@using (Html.BeginForm())
{
    @Html.TextBoxFor(m => m.Visits)
    <br />
    @Html.Partial(\"Name\",Model)
    <input type=\"submit\" value=\"submit\" />
}
部分(
~/Views/Home/Name.cshtml
):
@model BaseDetails
@Html.TextBoxFor(x => x.Name)
当我在POST Index动作中提交表单时,模型属性Name和Visits均正确地与表单中的值绑定。