Blu*_*ppy 3 base-class viewmodel asp.net-mvc-3
我有一些从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;
}
}
Run Code Online (Sandbox Code Playgroud)
视图简单如下:
@using (Html.BeginForm())
{
@Html.TextBoxFor(m => m.Visits)
<br />
@Html.Partial("Name", Model)
<input id="Submit1" type="submit" value="submit" />
}
Run Code Online (Sandbox Code Playgroud)
部分视图上有一个文本框.
在IE中:ViewSource显示表单标记位于两个tetxboxes周围.
但是,当我提交控制器方法时:
[HttpPost]
public ActionResult EditLocal (LocalDetails model)
Run Code Online (Sandbox Code Playgroud)
model.Visits是否正确填充,但model.Name为空?
有任何想法吗?我在类中添加了无参数构造函数,因为如果我没有提交,我会在提交时遇到异常.
无法重现.对我来说很好.请注意,我没有使用任何构造我的观点模型,因为模型绑定将无法给他们打电话,所有的属性必须有公共getter和setter.
模型:
public abstract class BaseDetails
{
public string Name { get; set; }
}
public class LocalDetails : BaseDetails
{
public int Visits { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new LocalDetails());
}
[HttpPost]
public ActionResult Index(LocalDetails model)
{
return View(model);
}
}
Run Code Online (Sandbox Code Playgroud)
查看(~/Views/Home/Index.cshtml):
@model LocalDetails
@using (Html.BeginForm())
{
@Html.TextBoxFor(m => m.Visits)
<br />
@Html.Partial("Name", Model)
<input type="submit" value="submit" />
}
Run Code Online (Sandbox Code Playgroud)
部分(~/Views/Home/Name.cshtml):
@model BaseDetails
@Html.TextBoxFor(x => x.Name)
Run Code Online (Sandbox Code Playgroud)
当我在POST索引操作中提交表单时,两个模型属性Name和Visits都与表单中的值正确绑定.
| 归档时间: |
|
| 查看次数: |
4340 次 |
| 最近记录: |