MVC 提交带有部分视图的表单

2024-01-21

抱歉,如果之前已经回答过这个问题,我找不到任何与我的问题相符的内容。

我有一个视图,其中包含一个部分视图,并且在提交视图时,部分视图中的数据不会发送到控制器。我知道如果我使用编辑器模板,这应该可以工作,但我无法使用它,因为我需要来自部分内部主模型的数据。

我的创建视图(简化):

@model CreateXmlSchemaModel
@using (Html.BeginForm("Create", "XmlSchema", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <fieldset>
        <div class="editor-label">
            @Html.LabelFor(m => m.XmlSchema.Name)
        </div>
        <div class="editor-field">
            @Html.EditorFor(m => m.XmlSchema.Name)
        </div>
        <div id="fieldmapping">
            @Html.Partial("_XmlFieldMapping")
        </div>
        <div>
            <input type="submit" value="Create" class="button" />
        </div>
    </fieldset>
}

我的模型结构(简化):

public abstract class XmlSchemaModelContainerBase
{
    public IEnumerable<string> BusinessObjects { get; set; }
    public IEnumerable<XmlInputFieldModel> XmlFields { get; set; }
    public IEnumerable<string> BusinessObjectFields { get; set; }
}

public class XmlSchemaModelContainer : XmlSchemaModelContainerBase
{
    public XmlSchemaModel XmlSchema { get; set; }
}

public class XmlSchemaModel
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string BusinessObject { get; set; }
    public IEnumerable<XmlSchemaField> MappedFields { get; set; }
}

public class XmlSchemaField
{
    public string XmlElement { get; set; }
    public string BusinessObjectField { get; set; }
}

public class XmlInputFieldModel
{
    public string XmlElement { get; set; }
    public string XmlValue { get; set; }
}

public class CreateXmlSchemaModel : XmlSchemaModelContainer
{
    [Required(ErrorMessage = "File upload required")]
    public HttpPostedFileBase Xml { get; set; }
}

我的控制器(我不会全部发布,因为我可以立即知道我的 viewModel 不包含 MappedFields):

[HttpPost]
public ActionResult Create(CreateXmlSchemaModel viewModel)
{
}

我的 _XmlMappedFields 部分视图:

@model CherwellXmlConnector.Models.XmlSchemaModelContainer
@{
    Model.XmlSchema.MappedFields = Model.XmlSchema.MappedFields.OrderBy(i => i.XmlElement);
}

<div>
    <div>
        @for(int i = 0; i < @Model.XmlFields.Count(); i ++)
        {
            List<CherwellXmlConnector.Models.XmlSchemaField> fields = Model.XmlSchema.MappedFields.ToList();
            string itemValue = Model.XmlFields.FirstOrDefault(x => x.XmlElement == fields[i].XmlElement).XmlValue;

            <div style="width: 300px; display: inline-block;">
                @Html.DisplayFor(x => fields[i].XmlElement)
            </div>
            <div style="width: 300px; display: inline-block;">
                @itemValue
            </div>
            <div class="busoblist" style="display: inline-block;">
                @Html.DropDownListFor(x => fields[i].BusinessObjectField, new SelectList(Model.BusinessObjectFields))
            </div>
            <hr />
        }
    </div>
</div>

我的目的是在部分中向用户显示所有给定 XmlField 及其值的列表,并允许他们从每个 XmlField 的下拉列表中选择 BusinessObjectField。然后我希望将其提交回控制器内IEnumerable<XmlSchemaField> MappedFields目的。这可能吗?


是的,这是可能的。

您面临的问题是由于模型绑定的工作方式造成的。如果这只是一个primitive type你正在尝试绑定IEnumerable,那么它就可以正常工作了。

@foreach(var item in @Model.XmlSchema.MappedFields)
    {
        string itemValue = Model.XmlFields.FirstOrDefault(x => x.XmlElement == item.XmlElement).XmlValue;
        <div style="width: 300px; display: inline-block;">
            @Html.DisplayFor(i => item.XmlElement)
        </div>
        <div style="width: 300px; display: inline-block;">
            @itemValue
        </div>
        <div class="busoblist" style="display: inline-block;">
            @Html.DropDownListFor(i => item.BusinessObjectField, new SelectList(Model.BusinessObjectFields))
        </div>
        <hr />
    }

如果你看一下上面代码生成的源代码,你会看到所有的dropdowns (select从上面的代码生成的标签)具有相同的名称。因此,当您提交表单时,它不会正确绑定到您的模型。

以下是一篇很好的博客文章,我发现它非常有用,它详细解释了这一点

http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/ http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/

UPDATE

对于那些来这里寻找将数据发布到列表的答案的人,我写了一篇博客文章。http://amilaudayanga.wordpress.com/2014/03/05/posting-data-to-a-list-in-asp-net-mvc-part1/ http://amilaudayanga.wordpress.com/2014/03/05/posting-data-to-a-list-in-asp-net-mvc-part1/

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

MVC 提交带有部分视图的表单 的相关文章

随机推荐

  • 使用纬度和经度时收到 403 禁止错误:地理编码

    我们的网站可以选择插入您的邮政编码 然后与地理编码一起计算出纬度和经度 此代码多年来没有更改 但今天 如果用户尝试插入邮政编码或从昨天或在错误 远程服务器返回错误 403 禁止 之前更新它 弹出 请求数量还没有超过 2 500 所以我不认为
  • BitmapSource.Create() 方法中 DPI 的相关性是什么?

    我读了维基百科的文章DPI http en wikipedia org wiki Dots per inch 但这让我更加困惑 我没有图像上的任何 DPI 信息 我应该使用什么 DPIBitmapSource Create http msd
  • C#类型转换不一致?

    在 C 中 我无法隐式转换long to an int long l 5 int i l CS0266 Cannot implicitly convert type long to int An explicit conversion ex
  • 调用M2存储库中的jar文件

    我有一个项目 我想在当前项目的执行后阶段调用 M2 存储库中的另一个 Jar 文件 我的 POM 的示例骨架
  • TypeScript 中像 methodName() 这样的尖括号有什么用?

    如果有任何关于为什么我们在类型脚本中使用尖括号 的教程 您能帮我一下吗 例如 我在这里给出了一些代码 我需要解释 export class HomePage constructor public navCtrl NavController
  • 为什么G1GC在开始混合收集之前先收缩年轻代?

    当 G1 决定需要开始进行混合收集时 它会积极地将我们的 Eden 空间从 10g 缩小到大约 1g Heap before GC invocations 294 full 0 garbage first heap total 204800
  • sqlalchemy 强制所有连接关闭 mysql

    我们在一些复杂的单元测试中使用sqlalchemy 在每次测试结束时 我们完全使用以下命令拆除数据库drop all 有时 有人会忘记关闭嵌入单元测试深处的会话 然后 我们必须花费大量时间试图找出问题所在 并最终关闭 sqlalchemy
  • 单击 LinkBut​​ton 上的动态文本框

    我通过单击 LinkBut ton 在页面中创建动态文本框 但是 之后 如果提交页面 我找不到动态创建的项目 因此无法将信息发送到数据库 protected void lbAddTag Click object sender EventAr
  • JQGrid 获取特定列的所有值,而不考虑分页

    我正在使用 json 从数据库中提取数据 如何获取特定列的所有值 我想获取 PrimarySkill 列的所有值 全套值 无论分页如何 var texts listTableSupply jqGrid getCol PrimarySkill
  • 如何从 C# 更改 PowerPoint 中 TextRange 的字体颜色?

    我使用 C 创建了一个 PowerPoint 演示文稿 PowerPoint Application powerpointApplication PowerPoint Presentation pptPresentation PowerPo
  • Junit 与 new Date()

    当我有以下方法时 junit 测试会是什么 Override public void saveLastSuccesfullLogin final User user gebruiker setLastLogin new Date store
  • 在网页上,如何为特定部分设置滚动条?

    在获得的背面这个问题 https stackoverflow com questions 21159136 on a web page how can i create a horizontal scroll instead of havi
  • 如何使用 javascript 显示 PNG 图像的动画图像? [ 如 Gmail ]

    First of all check out this image Gmail uses this image to display the animated emoticon How can we show such animation
  • 启动应用程序的第二个实例的小部件

    当我点击小部件时 我在从小部件启动应用程序时遇到问题 这是一些代码的剪辑 Create an Intent to launch activity Intent intent new Intent context Entry MainTabV
  • 如何在Python中使用正则表达式排除特定字符串?

    我想匹配如下字符串 45 meters 45 meters 45 45 但不是像这样的字符串 45 meters you 45 you 45 and you 在这两种情况下 问号都必须位于末尾 所以 本质上我想排除所有包含 you 这个词的
  • 如何在构造函数中初始化 Objective-C 结构体?

    我在 Objective C 上使用一个结构来存储一些数据 如下所示 interface Interface NSObject my Data struct Data unsafe unretained BOOL isInit unsafe
  • 真正的 CTE 递归?

    我今天下午刚刚发现了 CTE 在享受了 2 个小时之后 我意识到它们并没有像我们在任何其他语言中学到的那样执行常见的递归 我的意思是 我总是将递归视为树搜索 所以我原以为 CTE 会一路下降到它发现的第一片叶子 但没有 他的工作是分层进行的
  • Power Query 列名称作为参数

    亲爱的巫师们 我正在尝试创建一个可以使用输入的搜索功能 1 搜索表 2 该表中将运行搜索的列 3 在2指定的列中搜索的值 该函数如下所示 mTbl as table mColName as text mColValue as text gt
  • 如何在 RDBMS 中表示预定事件?

    我必须存储可以每周 每天或每月组织的预定活动 例如上课时间 例如 事件可以在每周一和周三或每月的第二个周四发生 有没有办法将这些信息存储在遵循 3NF 的 RDBMS 中 编辑 这不是家庭作业 我正在和一个朋友一起构建一些东西来启发我们自己
  • MVC 提交带有部分视图的表单

    抱歉 如果之前已经回答过这个问题 我找不到任何与我的问题相符的内容 我有一个视图 其中包含一个部分视图 并且在提交视图时 部分视图中的数据不会发送到控制器 我知道如果我使用编辑器模板 这应该可以工作 但我无法使用它 因为我需要来自部分内部主