【问题标题】:MVC Razor Modelbinding for partial view (post)局部视图的 MVC Razor 模型绑定(帖子)
【发布时间】:2019-10-01 12:15:16
【问题描述】:

对于后请求,如果我使用的是局部视图,模型绑定似乎不起作用。

主视图的模型是 MainViewModel。

public class MainViewModel
{
    ModelPart Model {get;set;}
}

public class ModelPart
{
    Public string MyVariable {get; set;}
}

如果我将主视图模型传递给部分视图,则绑定成功,MyVariable 中的任何输入都可以在 Controller Post 方法中找到。

主页

@model TEST.MainViewModel
@using (Html.BeginForm(FormMethod.Post, new { data_ajax = "false", enctype = "multipart/form-data" }))
{
    @Html.Partial("~/Areas/Views/Shared/_Input.cshtml", Model.Model)
}

部分

@model TEST.ModelPart

@Html.EditorFor(m => m.MyVariable)

这行得通!

如果我只将 ModelPart 传递给局部视图,则绑定不成功。

主页

@model TEST.MainViewModel
@using (Html.BeginForm(FormMethod.Post, new { data_ajax = "false", enctype = "multipart/form-data" }))
{
    @Html.Partial("~/Areas/Views/Shared/_Input.cshtml", Model)
}

部分

@model MainViewModel
@Html.EditorFor(m => m.Model.MyVariable)

这不起作用。因为我想使用部分来重用输入表单,所以这个问题是我想解决的。 我是否必须手动绑定部分视图中的属性?另一种解决方法是使用 javascript 传递值,但无论如何我可以获得默认绑定来获取它吗?

【问题讨论】:

    标签: asp.net-mvc razor model-view-controller binding


    【解决方案1】:

    当使用 @Html.Partial 时,生成的名称不会以父母为前缀。因此,在发布模型绑定器时将无法映射发布对象。

    有两种解决方法:

    • 在渲染局部视图时手动设置上下文的前缀(不是一个好主意)。
    • 使用编辑器模板(更好的选择)。

    编辑器模板的使用方式与局部视图相同,但它们会正确绑定。 这样做:

    主视图:

    @model TEST.MainViewModel
    @using (Html.BeginForm(FormMethod.Post, new { data_ajax = "false", enctype ="multipart/form-data" }))
    {
        @Html.EditorFor(m=>m)
    }
    

    编辑器模板(在 Views/Shared/EditorTemplates/MainViewModel.cshtml 中)

     @model MainViewModel
     @Html.EditorFor(m => m.Model.MyVariable)
    

    【讨论】:

    • 这或多或少是我在第二个示例中所做的,它要求我在模板中具有相同的“MainViewModel”。我想使用不限制 MainViewModel 的部分。它应该只使用“ModelPart”
    • 然后只为ModelPart创建一个编辑器模板:@model TEST.MainViewModel @using (Html.BeginForm(FormMethod.Post, new { data_ajax = "false", enctype ="multipart/form-data" })) { @Html.EditorFor(m=>m.Model) }@model ModelPart @Html.EditorFor(m => m.MyVariable)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多