在asp.net mvc 4中回发时未绑定到模型的对象列表

朗姆酒

在我的MVC 4应用程序中,我有一个Customer,该Customer可以具有多个站点并可以订阅多个服务包。我的视图模型的简短版本如下所示

public class SubscriptionModel
{        
    public int MemberId { get; set; }
    public List<SitePackage> SitePackges { get; set; }
    public SubscriptionModel()
    {
        SitePackges=new List<SitePackage>();
    }
}

public class SitePackage
{
    public int SiteId { get; set; }
    public List<PackageDisplayItem> LstPackageDisplayItems { get; set; }
    public SitePackage()
    {
        LstPackageDisplayItems=new List<PackageDisplayItem>();

    }
}

public class PackageDisplayItem
{
    public int PackageId { get; set; }

    [Display(Name = "Package")]
    public string Name { get; set; }        

    [DataType(DataType.Date)]
    [Display(Name = "Start Date")]
    public DateTime? StartDate { get; set; }

}

在控制器中,我填写了模型,然后传递给View Model进行渲染

 @using (@Html.BeginForm("CalculateCost", "HelpDesk", FormMethod.Post, new { @class = "form", id = "PackageSubscription", name = "PackageSubscription" }))
 {
 @Html.HiddenFor(x=>x.MemberId)

 <table class="table">
  @foreach (var site in Model.SitePackges)
  {
    <input name="SiteId" id="SiteId" type="hidden" [email protected]() />
           <tr><td class="col-sm-3">@site.SiteId</td></tr>
           <tr>
               <th class="col-sm-3">
                   Name
               </th>

               <th class="col-sm-2">
                   Start Date
               </th>
           </tr>
           @Html.Partial("_Packages",site.LstPackageDisplayItems)               

       }

我的局部观点就像

@model List<PackageDisplayItem>

@for (int i = 0; i < Model.Count; i++)
{
    @Html.HiddenFor(x => x[i].PackageId)
    <tr id="@Model[i].PackageId">
        <td>
            @Html.DisplayFor(x => x[i].Name)
        </td>

        <td>
            @Html.TextBoxFor(x => x[i].StartDate, "{0:d MMM yyyy}", new { @class = "jquery_datepicker form-control", autocomplete = "off" })
        </td>
    </tr>

}

一切都可以正常显示,但是在表单发布后,模型绑定器不是绑定SitePackges列表,其计数始终为0。我的控制器具有以下签名。

[HttpPost]
    public ActionResult CalculateCost(SubscriptionModel subscriptionModel )
    {
        var receivedModel = subscriptionModel;         
    }

不确定我设计的模型是否是满足此要求的最佳方法(要求是显示一个站点,并在其正下方显示软件包,然后显示第二个站点和软件包,依此类推)。控件似乎已生成唯一索引。

jQuery Post

function SubmitForm() {
console.log($("#PackageSubscription").serialize());
$.ajax({
    url: '/HelpDesk/CalculateCost',
    cache: false,
    dataType: 'json',
    data: $("#PackageSubscription").serialize(),
    type: 'POST',
    success: function (data) {
    }

});

}

我将不胜感激。谢谢

用户名

您当前的实现正在呈现如下输入:

<input ... name="[0].Name" .../>
<input ... name="[1].Name" .../>

但为了绑定到您的模型,它们将需要如下所示:

<input ... name="SitePackges[0].LstPackageDisplayItems[0].Name" .../>
<input ... name="SitePackges[0].LstPackageDisplayItems[1].Name" .../>
<input ... name="SitePackges[1].LstPackageDisplayItems[0].Name" .../>
<input ... name="SitePackges[1].LstPackageDisplayItems[1].Name" .../>

:您要么需要在嵌套循环中呈现控件,要么for

for(int i = 0; i < Model.SitePackges.Count; i++)
{
  @Html.HiddenFor(m => m.SitePackges[i].SiteId)
  for(int j = 0; j < Model.SitePackges[i].LstPackageDisplayItems.Count; j++)
  {
    @Html.TextBoxFor(m => m.SitePackges[i].LstPackageDisplayItems[j].Name)
  }
}

B:或对模型类型使用自定义EditorTemplates

视图/共享/EditorTemplates/SitePackage.cshtml

@model SitePackage
@Html.HiddenFor(m => m.SiteId)
@Html.EditorFor(m => m.LstPackageDisplayItems)

视图/共享/EditorTemplates/PackageDisplayItem.cshtml

@model PackageDisplayItem
@Html.TextBoxFor(m => m.Name)

在主视图中

@model SubscriptionModel
@using (@Html.BeginForm())
{
  @Html.HiddenFor(m => m.MemberId)
  @Html.EditorFor(m => m.SitePackges)
  <input type="submit" />
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在ASP.NET MVC中回发模型为null

来自分类Dev

ASP.NET Core 3 MVC:对象列表的模型绑定

来自分类Dev

ASP.NET MVC中的问题模型绑定嵌套列表

来自分类Dev

ASP.NET MVC中的问题模型绑定嵌套列表

来自分类Dev

ASP.NET MVC 4 JSON绑定到视图模型-嵌套对象错误

来自分类Dev

ASP.Net MVC回发和模型

来自分类Dev

ASP.NET MVC回发和HtmlHelper控件未反映模型更改

来自分类Dev

将模型对象列表列表发布到ASP.NET MVC中的Controller

来自分类Dev

验证ASP.NET MVC表单时回发

来自分类Dev

如何使用DropDownList绑定到WebGrid剃须刀ASP Net MVC 4中的模型?

来自分类Dev

ASP.NET MVC 4发送模型-视图到控制器

来自分类Dev

如何在asp.net mvc中回发期间持久保存部分视图模型数据

来自分类Dev

如何在asp.net mvc中回发期间持久保存部分视图模型数据

来自分类Dev

asp.net mvc,无序列表在回发时滚动到底部

来自分类Dev

asp.net mvc,无序列表在回发时滚动到底部

来自分类Dev

删除之间的一项时如何绑定ASP.NET MVC中的对象列表

来自分类Dev

Asp.net- Mvc复杂模型绑定

来自分类Dev

ASP.NET MVC模型绑定未解析

来自分类Dev

ASP.NET MVC绑定到视图模型

来自分类Dev

ASP.NET MVC绑定嵌套列表

来自分类Dev

ASP.NET MVC 5模型绑定列表为空

来自分类Dev

ASP.NET MVC 5模型绑定列表为空

来自分类Dev

使用GET的ASP.Net MVC模型绑定复杂对象

来自分类Dev

ASP.NET MVC 4绑定

来自分类Dev

JSON的ASP.NET MVC 4递归模型绑定

来自分类Dev

ASP.NET MVC 中的数据绑定

来自分类Dev

什么是ASP.NET MVC中的模型绑定?

来自分类Dev

ASP.NET MVC:模型绑定中的类型转换

来自分类Dev

如何在Asp.Net MVC 4中将复杂属性绑定到多态模型中?

Related 相关文章

热门标签

归档