提交模式的行动,是从视图模型的类型不同(Submitting a model to action t

2019-10-21 07:04发布

我有两个型号:

public class PersonViewModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Title { get; set; }
}

public class DetailViewModel
{
     public IEnumerable<string> Titles { get; set; }
     public PersonViewModel Person { get; set; }         
}

的形式呈现两个字段,所述第一字段是所述Name ,所述第二字段是所述的一个下拉Titles (先生,夫人小姐。等)

该页面的视图是强类型到DetailViewModel ,并且Save在控制器方法接受类型的参数PersonViewModel

由于视图是强类型的类型,它是从表单操作的参数类型不同 ,放在HttpRequest的名称不匹配什么MVC中的作用期待。

是否有可能正确地与模型失配有MVC绑定, 而无需手动指定表单字段的名字呢? (例如,我仍然想使用@Html.TextBoxFor(m => m.Person.Name)

为了澄清,正在提交的表单字段名称类似于以下内容:

Person.Name =马修&Person.Title =先生。

我需要以下(为模型绑定工作):

名称=马修&标题=先生。

Answer 1:

您可以使用Prefix的财产BindAttribute的操作方法

public ActionResult Edit([Bind(Prefix="Person")]PersonViewModel model)
{
}

这基本上去掉了Person从属性名称的前缀,而结合



文章来源: Submitting a model to action that is different from view model's type