首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >提交到控制器时,部分视图模型为空

提交到控制器时,部分视图模型为空
EN

Stack Overflow用户
提问于 2018-06-10 06:32:00
回答 1查看 759关注 0票数 1

我有一个包含其他视图模型的视图模型。

代码语言:javascript
复制
public class AggregateVM
{
    public BrandVM BrandVM { get; set; }
    public TinTypeVM TinTypeVM { get; set; }
}

当我通过http post访问控制器操作时,TinTypeVM将填充我编辑过的值,但我使用partial的BrandVM视图模型始终为空。

这是视图。

代码语言:javascript
复制
@model SaveEF.ViewModels.AggregateVM
@using (Html.BeginForm("EditAggregate", "Aggregate")) 
{
    @Html.Partial("_EditBrand", Model.BrandVM)

    @Html.Label("Tin Name")
    @Html.EditorFor(model => model.TinTypeVM.Name)
    <input type="submit" value="Save" />
}

这是局部视图。

代码语言:javascript
复制
@model SaveEF.ViewModels.BrandVM
@Html.Label("Brand Name")
@Html.EditorFor(model => model.Name)

下面是控制器操作。

代码语言:javascript
复制
public ActionResult EditAggregate(AggregateVM vm)
{
    SaveBrand(vm.BrandVM);
    SaveTinType(vm.TinTypeVM);
    return RedirectToAction("Index");
}

如何在视图中使用部分参数,同时仍然将单个视图模型传递到EditAggregate操作中?我在Html.BeginForm中尝试了不同的参数(“EditAggregate”,"Aggregate",FormMethod.Post,new { vm = Model }),但都没有帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-10 08:30:03

Short Answer

你也需要把AggregateVM传递给你的partial。

Long Answer

你现在做的方式是:

代码语言:javascript
复制
@model SaveEF.ViewModels.BrandVM
@Html.EditorFor(model => model.Name)

因此,如果您要检查为编辑器生成的name,它将是Name。因此,当您发布时,MVC的默认模型绑定器将在视图模型中查找匹配的属性。但是视图模型是这样的:

代码语言:javascript
复制
public class AggregateVM
{
    public BrandVM BrandVM { get; set; }
    public TinTypeVM TinTypeVM { get; set; }
}

并且没有Name属性。

修复

你也需要把AggregateVM传递给你的partial。

代码语言:javascript
复制
@model SaveEF.ViewModels.AggregateVM
@Html.EditorFor(model => model.BrandVM.Name)

现在编辑器的名称将是BrandVM.Name。因此,当您发布时,默认的模型绑定器将查找属性BrandVM.Name并找到它。因此,它将填充它。

另一种方法是使用@Html.Editor自己指定name属性,或者传递该属性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50779071

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档