在同一父视图上多次使用一个局部视图

2024-05-27

我正在使用 MVC3 剃须刀。我有一个场景,我必须在同一个父视图上多次使用部分视图。我遇到的问题是,当渲染父视图时,它会在这些部分视图中生成相同的输入控件名称和 ID。由于我的部分视图绑定到不同的模型,因此当视图在“保存”上发回时,它会崩溃。知道如何使控件 ID/名称唯一,可能是如何给它们添加前缀吗?

Awaiting

Nabeel


就我个人而言,我更喜欢使用编辑器模板,因为它们会处理这个问题。例如,您可以拥有以下视图模型:

public class MyViewModel
{
    public ChildViewModel Child1 { get; set; }
    public ChildViewModel Child2 { get; set; }
}

public class ChildViewModel
{
    public string Foo { get; set; }
}

以及以下控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            Child1 = new ChildViewModel(),
            Child2 = new ChildViewModel(),
        };
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return View(model);
    }
}

并在里面Index.cshtml view:

@model MyViewModel
@using (Html.BeginForm())
{
    <h3>Child1</h3>
    @Html.EditorFor(x => x.Child1)

    <h3>Child2</h3>
    @Html.EditorFor(x => x.Child2)
    <input type="submit" value="OK" />
}

最后一部分是编辑器模板(~/Views/Home/EditorTemplates/ChildViewModel.cshtml):

@model ChildViewModel

@Html.LabelFor(x => x.Foo)
@Html.EditorFor(x => x.Foo)

使用EditorFor您可以包含主视图模型的不同属性的模板,并且将生成正确的名称/ID。除此之外,您还将在 POST 操作中正确填充视图模型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在同一父视图上多次使用一个局部视图 的相关文章

随机推荐