【问题标题】:Form submission for mvc model enumerable using editor template使用编辑器模板可枚举的 mvc 模型的表单提交
【发布时间】:2016-09-29 05:22:19
【问题描述】:

我的模型视图 ViewSetup 有一个编辑器模板。我使用模板的观点被简化为

@model IEnumerable<ViewSetup>
@Html.EditorFor(s => s)

我的 ViewSetup 编辑器模板具有如下表单提交:

using (Ajax.BeginForm("Edit", new AjaxOptions() { HttpMethod = "Post" }))
{   
    @Html.HiddenFor(p => p.TradingPartner.ID)
    <input type="submit" value="Save" />
}

所以基本上我需要为 Enumerable 的每个元素提交一个表单。但是我在提交表单时遇到了问题。我处理帖子的控制器是:

public ActionResult Edit(ViewSetup formDataSent)
{
    formDataSent.Save();    
}

根据默认模型绑定,我的 TradingPartner 属性为空,因为 html 中的名称是:

<input name="[0].TradingPartner.ID" type="hidden" value="1"/>

我只需要在每个元素上提交 ViewSetup 对象而不是数组。如果我可以删除名称中的索引部分,这可能对我有用。但我不确定如何在表单提交时仅获取 ViewSetup 对象。

【问题讨论】:

    标签: asp.net-mvc-4


    【解决方案1】:

    我敢打赌,如果您将编辑器基于一个项目而不是项目列表,那么您将获得更大的灵活性。

    @model IEnumerable<ViewSetup>
    
    @foreach (var item in Model)
    {
       @Html.EditorFor(modelItem => item.TradingPartner)
    }
    

    【讨论】:

    • 不,但我有许多 ViewSetup 模型的属性。它比这更复杂,但我只是用上面的一个属性进行了简化。
    • 也许看看使用部分。每个部分都可以有一个模型,并使用子模型调用其他部分。但是,这会增加更多的冗长。
    • 我必须使用模板,因为我必须在我的应用程序的许多地方重复使用它。有什么方法可以在表单循环中提交每个元素(我看到的唯一方法是没有将索引添加到 html 名称中)..谢谢。
    • 好吧,如果您的 TradingPartner 编辑器提交给一个带贸易伙伴的控制器,那么您应该很好,并且会处理添加的索引。但是,您需要创建一个从帖子中获取 TradingPartner 的控制器方法。我不知道你的观点发生的其他事情。
    • 好吧,我必须从可枚举中提交每个 ViewSetup 模型。每个 ViewSetup 都以 html 形式提交。问题是由于 html 名称中的 [0],TradingPartner 没有被映射。其为空。我不希望以某种方式以我的名义索引。我不需要 ViewSetup 模型中的属性编辑器。
    【解决方案2】:

    我遇到了同样的问题,为我解决了这个问题:

    @foreach (var item in Model)
    {
       @Html.EditorFor(modelItem => item.TradingPartner, null, "")
    }
    

    EditorFor 的第三个属性为空白将删除对象中的“[0]”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-15
      • 1970-01-01
      • 2013-02-14
      • 2011-10-16
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多