如何让MVC3局部视图接收基类,提交表单仅更新父类属性?

2026-03-30 12:491阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计529个文字,预计阅读时间需要3分钟。

如何让MVC3局部视图接收基类,提交表单仅更新父类属性?

我有一些从ViewModel基类继承的子ViewModel类。我将我的孩子ViewModel传递给我的View,然后将其传递给局部视图。主视图采用子类类型,但局部视图采用父类类型。手动填充属性时,总是确保正确显示。

我有一些从ViewModel基类继承的子ViewModel类.

我将我的孩子ViewModel传递给我的View,然后将其传递给局部视图.
主视图采用子类型,但局部视图采用父类型.

手动填充属性时,一切都正确显示.
但是,当我提交表单时,我的控制器操作只有Child类的属性 – 没有基类属性完成?

例如

如何让MVC3局部视图接收基类,提交表单仅更新父类属性?

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都与表单中的值正确绑定.

本文共计529个文字,预计阅读时间需要3分钟。

如何让MVC3局部视图接收基类,提交表单仅更新父类属性?

我有一些从ViewModel基类继承的子ViewModel类。我将我的孩子ViewModel传递给我的View,然后将其传递给局部视图。主视图采用子类类型,但局部视图采用父类类型。手动填充属性时,总是确保正确显示。

我有一些从ViewModel基类继承的子ViewModel类.

我将我的孩子ViewModel传递给我的View,然后将其传递给局部视图.
主视图采用子类型,但局部视图采用父类型.

手动填充属性时,一切都正确显示.
但是,当我提交表单时,我的控制器操作只有Child类的属性 – 没有基类属性完成?

例如

如何让MVC3局部视图接收基类,提交表单仅更新父类属性?

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都与表单中的值正确绑定.