这就是我所用的视图模型
public class MainRegisterViewModel
{
public RegisterViewModel RegisterModel { get; set; }
public RegisterFormValuesViewModel RegisterValues { get; set; }
}
RegisterFormValuesViewModel
包含控件的所有值(国家、州和诸如此类的列表),RegisterViewModel
包含用户的信息。
然后我像这样加载控件。
@model ProjetX.Models.MainRegisterViewModel
@{
IEnumerable<SelectListItem> countries = Model.RegisterValues.Countries.Select(x => new SelectListItem()
{
Text = x.Country,
Value = x.Id.ToString()
});
IEnumerable<SelectListItem> states = Model.RegisterValues.States.Select(x => new SelectListItem()
{
Text = x.State,
Value = x.Id.ToString()
});
}
<div class="container">
<div class="row">
<div class="col-md-12">
@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
....
<div class="form-group">
@Html.LabelFor(m => m.RegisterModel.Country, new { @class = "col-md-2 control-label" })
<div class="col-md-10">
@Html.DropDownListFor(m => m.RegisterModel.Country, countries, new { @class = "form-control" })
</div>
</div>
....
同时,寄存器函数接受一个MainRegisterViewModel
作为参数。
public async Task<ActionResult> Register(MainRegisterViewModel model)
问题是当我提交表单时,RegisterFormValuesViewModel
是NULL
。
知道为什么吗?
谢谢
上下文
我这样做是因为我从一个API加载了RegisterFormValuesViewModel
,并且我只尝试调用它一次。问题是当用户发布带有错误的表单并返回视图时,我不得不再次调用API以获得RegisterFormValuesViewModel
。
在此之前,它只是RegisterFormValuesViewModel
的一个模型和一个视图包,但是每次加载表单时,我都必须调用API,因为没有发布这个视图。这就是为什么我认为我可以使用两个模型,并张贴他们两个。
发布于 2014-02-22 02:49:52
如果希望发布RegisterFormValuesViewModel
的值,则需要将它们包括在ModelBinder查找值的表单或其他位置中。(默认)模型绑定将从操作参数、Request.Form、路由数据和Request.QueryString (我认为Request.Files也包括在内)中获取值。
如果您的RegisterFormValuesViewModel
创建成本很高,您可以将它的值作为隐藏字段添加到表单中,或者实现与应用程序或会话状态一起工作的自定义ValueProviderFactory
。
https://stackoverflow.com/questions/21948840
复制相似问题