1

试图弄清楚如何创建动态(即在运行时更改)网页时,我有点不知所措-实际上不知道最好的方法是什么。情况:

我正在创建一个 ASP .NET MVC3 Web 应用程序,并希望创建一个用户在其中创建Tariff对象并向其中添加TariffBand对象的页面Tariff.Bands- TariffBand 对象列表(下面的类定义)。每个乐队要求:

  • 下限的文本框
  • 上限的文本框
  • 单位费率的文本框

用户将在视图中输入每个 TariffBand 的详细信息/Tariff/Create,理想情况下,我希望页面上有一个按钮 ( "Add another band"),它将显示关税下一个频段的另一组文本框。

我了解如何创建上面的文本框,但我无法锻炼我应该如何编辑视图文件以满足上述要求。我应该使用一些局部视图吗?或者使用javascript注入一些HTML?

我不是特别在寻找任何代码(尽管如果你想分享一些我会很感激,而是关于实现这一目标的最佳方法的指导。我对 razor/c# 没问题,但对 javascript/jQuery 没有问题。

我的最后一个问题是:如何在不使用 @Html.TextboxFor() 方法的情况下将在文本框等中输入的值分配给视图的模型属性?只是好奇是否有办法做到这一点。

任何帮助真的很感激,尝试谷歌这个有点疯狂!

关税

class Tariff
{
    public int id {get; set;}
    public List<TariffBand> Bands {get; set}
}

关税范围

class TariffBands
{
    public int Id {get; set;}
    public int UpperLimit  {get; set;}
    public int LowerLimit  {get; set;}
}

非常感谢,大卫

4

3 回答 3

2

您可以使用非顺序索引来实现这一点。

首先,在 Haacked 的博客中查看有关它们的一般信息

来自博客:

...我们为需要绑定到列表的每个项目提供带有 .Index 后缀的隐藏输入。这些隐藏输入中的每一个的名称都是相同的,因此如前所述,这将为模型绑定器提供一个很好的索引集合,以便在绑定到列表时查找

<form method="post" action="/Home/Create">

    <input type="hidden" name="products.Index" value="cold" />
    <input type="text" name="products[cold].Name" value="Beer" />
    <input type="text" name="products[cold].Price" value="7.32" />

    <input type="hidden" name="products.Index" value="123" />
    <input type="text" name="products[123].Name" value="Chips" />
    <input type="text" name="products[123].Price" value="2.23" />

    <input type="hidden" name="products.Index" value="caliente" />
    <input type="text" name="products[caliente].Name" value="Salsa" />
    <input type="text" name="products[caliente].Price" value="1.23" />

    <input type="submit" />
</form>

然后,一旦你了解了这项技术的原理,就有可能使用 html 助手来构建这些:

我知道这些助手的两个版本。您可以选择一个:

  1. Ivan Zlatev 的助手(我更喜欢这个)
  2. 史蒂文·桑德森的助手
于 2012-07-27T21:06:58.597 回答
0

我不会提供所有代码,但制作模型会有所帮助。

使用一些 jQuery 在客户端上动态创建 DOM 元素(即每个关税的多个关税段)和数组(即 TariffBands[0].UpperLimit 的 id 等),以提供在客户端上动态添加多个关税段的能力客户。当它发布时,默认绑定器会将其绑定到 TariffBands 数组(前提是您在客户端上具有正确的 ID)。

我通过多个文件上传来执行此操作(即 UploadedDocuments[0] 将是客户端名称属性,然后我可以使用该名称添加尽可能多的输入以及当时的索引,然后迭代 POST 以保存文件。

于 2012-07-27T20:27:33.357 回答
0

您还可以创建一个EditorTemplateforTariffBand并在视图中使用它。在这个SO 讨论中检查我的答案

于 2012-07-28T09:15:26.727 回答