gpt4 book ai didi

c# - 使用自定义 EditorTemplate 和局部 View 将 MVC3 模型绑定(bind)分页列表到 ViewModel

转载 作者:行者123 更新时间:2023-11-30 18:40:06 25 4
gpt4 key购买 nike

我正在尝试生成包含在局部 View 中的分页结果表。它通过 ajax 调用动态刷新。

我在许多页面上重现了它,但在它完美运行的地方,但是在特定页面上,我需要绑定(bind)表格行的值并使用 ViewModel 返回。

为了实现这一点,我尝试为我用于 PagedList 集合的自定义对象使用 EditorTemplate。问题在于出现在 PartialView 上的编辑器模板没有正确命名主 ViewModel 上的 PagedList 集合。

如果我用代码解释可能会更容易。

主视图是这样出现的:

@model RequestCreateViewModel
<Code>

<div id="gridContainer">
@Html.Partial("_PagedCreateRequest")
@Html.HiddenFor(x => x.PageSize)
@Html.HiddenFor(x => x.PageNumber)
</div>
<div id="loadingContainer">
</div>

<More code>

因此,偏音是:

@model IPagedList<CreateRequestModel>
<Code>

<table class="tablesorter" style="width:750px;">
<thead>
<tr>
</tr>
</thead>
<tbody>
@Html.EditorFor(x => Model)
</tbody>
</table>
</div>

<div style="float:left">
@Ajax.ImageActionLink(
"../../Content/images/first.gif",
"alt text",
"PageResults",
new
{
Page = 1,
area = "Admin",
SortBy = Model.SortBy,
SortDescending = Model.SortDescending,
PageSize = Model.PageSize
},
new
{
style = "margin-top: 2px;"
},
new
{
@readonly = "readonly"
},
new AjaxOptions
{
UpdateTargetId = "gridContainer"
}

)
</div>

+ other pager Ajax pager icons and stuff

EditorTemplate 是:

@model CreateRequestModel

<tr>
<td>
@Html.CheckBoxFor(x => x.IsSelected)
</td>
<td>
@Html.DisplayFor(x => x.CompanyName)
@Html.HiddenFor(x => x.CompanyName)
</td>
<td>
@Html.DisplayFor(x => x.CompanyISIN)
@Html.HiddenFor(x => x.CompanyISIN)
</td>
<td>
@Html.DisplayFor(x => x.ShareDesc)
@Html.HiddenFor(x => x.ShareDesc)
</td>
<td>
@Html.DisplayFor(x => x.ShareClass)
@Html.HiddenFor(x => x.ShareClass)
</td>
</tr>

ViewModel 是:

public class RequestCreateViewModel : ViewModelBase
{
public IPagedList<CreateRequestModel> PagedList { get; set; }

CreateRequestModel 是:

public class CreateRequestModel
{
public int RequestId { get; set; }

public bool IsSelected { get; set; }

public string CompanyName { get; set; }
public string CompanyISIN { get; set; }
public string ShareDesc { get; set; }
public string ShareClass { get; set; }
}

但是当回发到 Controller 时(代码):

 [Authorize(Roles = "Foo")]
[HttpPost]
public ActionResult RequestCreate(RequestCreateViewModel model)

属性 IPagedList 没有绑定(bind)到 ViewModel(显然),因为 EditorTemplate 的命名标准是

例如:[0].随便

而不是:

PagedList[0].随便

我也无法在 ViewModel 中为 IPagedList 实例化接口(interface)的绑定(bind)副本。那么我该如何将主视图中的信息返回到模型中呢?

我认为自定义 Model Binder 可能是解决方案,但我在这方面的经验很少。这样做的最终目的是确定表格中复选框的值。用户会选择或不选择,我需要知道他们选择了什么!

非常感谢您的帮助。

最佳答案

看看这篇文章:http://weblogs.asp.net/nmarun/archive/2010/03/13/asp-net-mvc-2-model-binding-for-a-collection.aspx

secret 是在控件上生成名称作为集合名称,索引器为

<input id="Products_0__ID" name="Products[0].ID" type="text" value="1" />

关于c# - 使用自定义 EditorTemplate 和局部 View 将 MVC3 模型绑定(bind)分页列表到 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8759244/

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