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

本文关键字:我可以 模型 无效 httpget 有效 表单 ViewModel | 更新日期: 2023-09-27 18:12:21

我有一个ViewModel充满了一个地方对象和一些其他数据的控制器。

在绑定到这个ViewModel的视图中,用户从下拉列表中选择一个项目并按下提交——这被一个带有[httppost]的action方法捕获。

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

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

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

本质上我想在[httppost]中得到一个不同的模型,我在[httpget]中使用。

这是可能的或可取的-或者它打破了模型绑定应该如何工作?当未绑定的模型项返回空时,是否需要制作一个没有验证的特定ViewModel来避免错误?

(我在谷歌上找不到关于这一点的任何指导)。

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

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

如果您使用视图模型仅在视图中显示某些内容。为什么会有Required标签。您应该创建并使用一个简单的视图模型,该模型具有视图所需的属性。只在需要验证的属性中使用[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和and视图中使用这个。您也可以对HttpPost操作参数使用相同的视图模型。当表单提交时,模型验证器将只验证SelectedStateId

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