gpt4 book ai didi

asp.net-mvc-3 - MVC3 将基类传递给部分 View - 提交表单只有父类值

转载 作者:行者123 更新时间:2023-12-01 10:09:51 25 4
gpt4 key购买 nike

我有许多继承自 ViewModel 基类的子 ViewModel 类。

我将我的子 ViewModel 传递到我的 View 中,然后将其自身传递到局部 View 中。主视图采用子类型,但分部 View 采用父类型。

当我手动填充属性时,一切都正确显示。但是,当我提交表单时,我的 Controller 操作只有子类的属性 - 基类的属性都没有完成吗?

例如

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" />
}

局部 View 上只有一个文本框。

在 IE 中:ViewSource 显示表单标签位于两个 tetxbox 周围。

但是,当我提交给 Controller 方法时:

[HttpPost]
public ActionResult EditLocal (LocalDetails model)

model.Visits 已正确填充,但 model.Name 为空?

有什么想法吗?我向类中添加了无参数构造函数,因为如果不这样做,我在提交时会遇到异常。

最佳答案

无法重现。对我来说很好用。请注意,我没有在我的 View 模型中使用任何构造函数,因为模型绑定(bind)器无法调用它们,并且所有属性都必须具有公共(public) getter 和 setter。

型号:

public abstract class BaseDetails
{
public string Name { get; set; }
}

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

Controller :

public class HomeController : Controller
{
public ActionResult Index()
{
return View(new LocalDetails());
}

[HttpPost]
public ActionResult Index(LocalDetails model)
{
return View(model);
}
}

View (~/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 都与表单中的值正确绑定(bind)。

关于asp.net-mvc-3 - MVC3 将基类传递给部分 View - 提交表单只有父类值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6257355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com