ViewModel在httpget上有效 - 当表单发回时无效 - 我可以回发一个不同的模型吗?

时间:2016-10-11 00:09:12

标签: c# asp.net-mvc asp.net-mvc-5

我有一个ViewModel,它由控制器填充了一个place对象和一些其他数据。

在绑定到此ViewModel的视图中,用户从下拉列表中选择一个项目并按下提交 - 这是由[httppost]的操作方法捕获的。

在这个阶段,我感兴趣的是用户在下拉列表中选择的值 - 而不是ViewModel中的任何值 - 其唯一目的是填充页面(除了单个DropDownList值)。

然而 - 由于地方对象没有按设计填充表单字段(我不需要返回这些值 - 或者甚至不显示其中的大部分) - 发回的模型现在无效 - 由于某些字段是[必需]并引发错误。

我想在[httpget]创建页面时将复杂的ViewModel绑定到视图。然后,当用户选择一个值并按下提交时 - 我不再需要ViewModel - 或者验证它。

基本上我想在[httppost]中获得与[httpget]中使用的模型不同的模型。

这是可行的还是可行的 - 或者它是否打破了模型绑定应该如何工作?是否需要制作一个没有验证的特定ViewModel,以避免在未绑定的模型项空出来时出错?

(我无法在Google上找到关于这一点的任何指导。)

1 个答案:

答案 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

简而言之,您的视图模型应该特定于您的视图。根据视图需要创建视图模型。