通过ViewModel将IENumerable整数值传递给控制器

时间:2013-10-04 11:04:40

标签: c# jquery asp.net-mvc entity-framework

模型

public class IntegerList
{
    public int IntegerListID { get; set; }
    public string Direction { get; set; }
    public long Performance { get; set; }
    public virtual ICollection<Integer> Integers { get; set; }
}

public class Integer
{
    public int IntegerID { get; set; }
    [Required(ErrorMessage = "An integer is Required")]
    [Range(0, 9999999, ErrorMessage = "Enter an integer")]
    public int IntegerValue { get; set; }
    public int IntegerListID { get; set; }
    public virtual IntegerList IntegerList { get; set; }
}

上述模型适用于将整数范围按升序或降序排序的应用程序,并计算执行排序所需的时间。

用户可以使用jquery添加或删除整数,从而将整数输入到文本框中。

我通过将formcollection传递给控制器​​来运行应用程序,将整数字符串拆分为一个整数值数组,以添加到IntegerList.Integers。

但是,我正在寻找一种更优雅的强类型解决方案。

视图模型

public class IntegerViewModel
{
    [UIHint("Integers")]
    public IEnumerable<Integer> Integers { get; set; }
    public string Direction { get; set; }
}

我正在努力将Integers.IntegerValues添加到视图中,以便可以通过viewmodel将它们传递给控制器​​。我还需要增加/减少每个IntegerValue文本框值,因为它是由jquery添加/删除的。我不确定我是从正确的角度接近这个。

我希望这很清楚。谢谢你的帮助。

剃刀

    <form method="post">
        <div id="integers">
            @Html.Label("Enter Integers")
            <div class="integer">
                @Html.EditorFor(model => model.Integers)
                <a href="#" id="addInt">Add Integer</a>
            </div>
        </div>
        @Html.Label("Sort Direction")
        <div>
            @Html.DropDownListFor(model => model.Direction, new[] {
                new SelectListItem() {Text = "Ascending", Value = "Ascending"},
                new SelectListItem() {Text = "Descending", Value = "Descending"}
            })

            <input class="button" type="submit" value="Submit" />
        </div>
    </form>

编辑模板(适用于整数)

@model Integer

@Html.EditorFor(m => m.IntegerValue)

1 个答案:

答案 0 :(得分:0)

让我总结一切。

在使用JavaScript(jQuery)添加和删除值(整数)时,您将找不到任何强类型解决方案。

因此,当您使用jquery添加整数编辑器时,您应该根据ASP.NET MVC契约呈现适当的HTML。

大卫的评论非常有价值。看看这个链接。 http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx

在这里,您可以看到如何呈现HTML以在服务器上接收不同类型的数据(ASP.NET MVC操作)。

此外,您可以检查您的EditorFor输出并呈现HTML,就像使用MVC渲染一样。

最后,这是关于ASP.NET MVC中动态表单字段的问题。 ASP.NET MVC Dynamic Forms

希望这有帮助。