我有一个ViewModel,它由控制器填充了一个place对象和一些其他数据。
在绑定到此ViewModel的视图中,用户从下拉列表中选择一个项目并按下提交 - 这是由[httppost]的操作方法捕获的。
在这个阶段,我感兴趣的是用户在下拉列表中选择的值 - 而不是ViewModel中的任何值 - 其唯一目的是填充页面(除了单个DropDownList值)。
然而 - 由于地方对象没有按设计填充表单字段(我不需要返回这些值 - 或者甚至不显示其中的大部分) - 发回的模型现在无效 - 由于某些字段是[必需]并引发错误。
我想在[httpget]创建页面时将复杂的ViewModel绑定到视图。然后,当用户选择一个值并按下提交时 - 我不再需要ViewModel - 或者验证它。
基本上我想在[httppost]中获得与[httpget]中使用的模型不同的模型。
这是可行的还是可行的 - 或者它是否打破了模型绑定应该如何工作?是否需要制作一个没有验证的特定ViewModel,以避免在未绑定的模型项空出来时出错?
(我无法在Google上找到关于这一点的任何指导。)
答案 0 :(得分:1)
我希望在[httpget]时将复杂的ViewModel绑定到视图 创建页面。然后,当用户选择一个值并按下时 提交 - 我不再需要ViewModel - 或验证它
如果您使用视图模型仅在视图中显示某些内容。为什么你甚至有必需的标签。您应该创建并使用具有视图所需属性的简单视图模型。仅在您确实需要验证的属性中具有[Required]属性。
public class SimplyInfoVm
{
public string Name { set;get;} // to Display some name
[Required]
public int SelectedStateId { set;get;}
public List<SelectListItem> States { set;get;}
}
现在在你的GET和视图中使用它。您也可以为HttpPost操作参数使用相同的视图模型。提交表单时,模型验证程序将尝试仅验证SelectedStateId
简而言之,您的视图模型应该特定于您的视图。根据视图需要创建视图模型。