加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc-3 – MVC3将基类传递给局部视图 – 提交表单只有父

发布时间:2020-12-16 09:22:31 所属栏目:asp.Net 来源:网络整理
导读:我有一些从ViewModel基类继承的子ViewModel类. 我将我的孩子ViewModel传递给我的View,然后将其传递给局部视图. 主视图采用子类型,但局部视图采用父类型. 手动填充属性时,一切都正确显示. 但是,当我提交表单时,我的控制器操作只有Child类的属性 – 没有基类属
我有一些从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;
        }
    }

视图简单如下:

@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索引操作中提交表单时,两个模型属性Name和Visits都与表单中的值正确绑定.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读