gpt4 book ai didi

c# - 更改表单上下文以确保正确命名嵌套模型?

转载 作者:太空宇宙 更新时间:2023-11-03 10:24:27 24 4
gpt4 key购买 nike

在 RoR 中,您可以更改表单上下文,以便它正确构建表单元素 ID 和名称(例如 simple_fields_for myModel do |innerModel| 或类似的)。我想知道使用 MVC5 执行此操作的正确方法是什么。例如……

模型

class Model1 {
public Model2 M2 { get; set; }
}

class Model2 {
public List<Model3> M3s { get; set; }
}

class Model3 {
public string Name { get; set; }
}

Controller

class MyController {
public ActionResult Test(Model1 model) {
View(model);
}
}

查看

@model Model1

@using (MvcForm form = Html.BeginForm()) {
Html.RenderPartial("_Model2", this.Model.M2);
}

如果 3 Model3实例被回发,模型状态应该类似于:

M2.M3s[0].Name=Name1
M2.M3s[1].Name=Name2
M2.M3s[2].Name=Name3

在这种情况下, View 使用局部渲染 Model2 , 但部分不知道它在 this.Model.M2 的上下文中因此不会为使用 Model2. 生成的 ID 和名称添加前缀-- 它只是以 Model3 开始它们.解决方案是使用新的表单上下文(不是字面意思 FormContext ),像这样:

@using (MvcForm form = Html.BeginForm()) {
using (form.For(m => m.M2)) {
Html.RenderPartial("_Model2", this.Model.M2);
}
}

请注意 form.For不存在,但目的是改变当前的 ModelMetadata具有适当的上下文和前缀 M2 .因此,在该 block 内呈现的任何内容都将继承该新上下文,并且将正确生成 ID 和名称。

最佳答案

您实际上可以在调用 RenderPartial 时指定前缀,然后分部 View 字段的表单值将自动接收该前缀:

Html.RenderPartial("_Model2", this.Model.M2, new ViewDataDictionary
{
TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = "M2" }
})

关于c# - 更改表单上下文以确保正确命名嵌套模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32143203/

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