asp.net-mvc - MVC 处理部分 View 模型中的集合项索引

标签 asp.net-mvc collections indexing asp.net-mvc-partialview asp.net-mvc-viewmodel

我有一个带有集合的 ViewModel,例如:

public class CreateCampaignViewModel : ControlPanelViewModel
{
    [RequiredField]
    public string Name { get; set; }

    public List<AdvertisementViewModel> Advertisements { get; set; }
    ...
}

在 View 中,如果我像这样使用它:
@for (int i = 0; i < Model.Advertisements.Count; i++)
{
  <fieldset style="z-index: 0;">
  <legend>מודעה</legend>
  <table style="width: 100%;">
    <tr>
      <td>
        <label for="@Html.NameFor(m => m.Advertisements[i].Title)">כותרת הפרסומת</label></td>
      <td>@Html.TextBoxFor(m => m.Advertisements[i].Title)</td>
    </tr>
  </table>
  </fieldset>
}

一切都很好,当我发布表格时我可以看到列表......

但我想将广告编辑器嵌套在部分 View 中,因此我的 View 变为:
@for (int i = 0; i < Model.Advertisements.Count; i++)
{
   Html.RenderPartial("AdvertisementEditor", Model.Advertisements[i]);
}

和我的部分:
@model Pushed.Models.AdvertisementViewModel

<fieldset style="z-index: 0;">
    <legend>מודעה</legend>
    <table style="width: 100%;">
        <tr>
            <td>
                <label for="@Html.NameFor(m => m.Title)">כותרת הפרסומת</label></td>
                <td>@Html.TextBoxFor(m => m.Title)</td>
        </tr>
    </table>
</fieldset>

我的问题是现在,当我发布表单时,我没有在每个广告的 TextBox 中获取值。

这是合乎逻辑的,因为现在我的 <input>标签没有 'advertisement[1].Title' 名称,但只有在我的包含模型中不存在的 'Title'。

我如何创建一个部分来反射(reflect)单个集合项的 indecies 以便它可以正确地重新发布表单?

最佳答案

找到了解决方案,不敢相信我以前没有找到!

有两种方法可以告诉 MVC.NET 为输入字段添加前缀:

  • 创建 EditorTemplate 而不是 PartialView ......它会很好用。
  • 定义 TemplateInfo.HtmlFieldPrefix

  • 如图所示调用局部 View :
    @{ 
      Html.RenderPartial("TargetAudienceParameters", Model.TargetAudienceParameter, 
          new ViewDataDictionary {
               TemplateInfo = new TemplateInfo {
                   HtmlFieldPrefix = "Advertisements[4]" // 4 being an example
               } 
          }); 
     }
    

    关于asp.net-mvc - MVC 处理部分 View 模型中的集合项索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21586082/

    相关文章:

    database - 我可以使用 where equals 子句和 orderby 查询 Cloud Firestore 集合吗?

    javascript - MVC Javascript 根据复选框值语法切换 TextInputFor Readonly?

    asp.net - 在 MVC4 RTM 中从 ASP.NET Membership 迁移到 SimpleMembership

    Kotlin:返回只读集合/集合

    c# - 无法在 C++ CLI 中维护指针集合

    list - 如何在 Kotlin 中将项目添加到列表中?

    indexing - Google 如何存储索引?

    c# - “CookieAuthenticationProvider”不包含“SlidingExpiration”的定义。 claim 到期时间

    jquery - MVC3 : jquery ajax to return partial view with HTML dataType from controller but getting error

    c# - Lucene.Net 何时重新索引我的数据库