gpt4 book ai didi

asp.net-mvc - MVC 自定义 ViewModel 和自动绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 07:14:41 26 4
gpt4 key购买 nike

我有一个自定义 ViewModel 定义为:

public class SampleFormViewModel
{
public SampleFormViewModel(SelectList companies, Widget widget)
{
Companies = companies;
Widget = widget;
}

public SelectList Companies { get; private set; }
public Widget Widget { get; private set; }
}

在我的编辑 POST 处理程序中,我有以下条目:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(SampleFormViewModel model)
{

编辑表单设置为:
Inherits="System.Web.Mvc.ViewPage<Sample.Web.Models.SampleFormViewModel>"

它只是爆炸了,不知道发生了什么,有以下错误:
没有为此对象定义无参数构造函数。
当然,我在这里遗漏了一些非常明显的东西。在某些背景下,GET 可以完美运行,并按预期显示 SelectList 中的下拉列表。
我猜想自动绑定(bind)回自定义 View 模型是失败的原因,但不知道该怎么做。

最佳答案

你需要有一个无参数的构造函数,我相信属性需要有公共(public) setter 。默认绑定(bind)器使用不带参数的构造函数创建对象,然后使用公共(public)属性上的反射来设置表单/查询参数的值。

public class SampleFormViewModel
{
public SampleFormViewModel() { }

public SelectList Companies { get; set; }
public Widget Widget { get; set; }
}

不过,我怀疑您真正想要做的不是获取 View 模型,而是获取底层 Widget 模型并在表单发布时选择列表值。我不认为活页夹将能够在 post 上重建 SelectList,因为它只有参数中的选定值。
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit( int CompanyID, Widget widget )
{
}

关于asp.net-mvc - MVC 自定义 ViewModel 和自动绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/765406/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com