【问题标题】:Pass 'list' model into and out of a view将“列表”模型传入和传出视图
【发布时间】:2016-03-02 22:01:44
【问题描述】:

不知道是否有人可以指出正确的方向?

基本上,我正在尝试创建一个页面,以允许某人在多个 (18) 洞上输入数据(高尔夫),但基本上我不确定它是如何完成的。

在模型中我创建了以下内容:

namespace BGSociety.Models
{
public class CreateCourseHolesViewModel
{
    public int holeNumber { get; set; }
    public int par { get; set; }
    public int si { get; set; }
    public int distance { get; set; }
}

}

在我得到的控制器的 Index 事件中:

TempData["holes"] = getHoles();

    protected List<CreateCourseHolesViewModel> getHoles()
    {
        var holes = new List<CreateCourseHolesViewModel>();

        for (int i =1; i < 19; i++)
        {
            holes.Add(new CreateCourseHolesViewModel { holeNumber = i });
        }
        return holes;

    }

我将其传递到视图中:

return PartialView("CreateCourseHoles", TempData["holes"]);

在视图中,我可以循环遍历列表并显示整数,每个数字旁边都有一个文本框,以允许输入 par、si 和 distance。

    var zHoles = TempData["holes"] as IEnumerable<BGSociety.Models.CreateCourseHolesViewModel>;
    foreach (var hole in zHoles)
    {
        <div class="row">
            <div class="col-sm-1">
                <p>@hole.holeNumber</p>
            </div>
            <div class="col-sm-6">
                <div class="form-group">
                    <div class="col-xs-12">
                        @Html.ValidationMessageFor(m => hole.par)
                        @Html.TextBox("par", TempData["par"], new { @class = "form-control", placeholder = "Par", name = "Par" })
                    </div>
                </div> 
            </div>
        </div>
    }

但我只是不知道如何将这个填充列表传递回控制器,以便我将数据输入数据库。

很有可能我走错了路(!),但如果有人能抽出几分钟的时间来提供帮助,那就太棒了!

谢谢, sx

【问题讨论】:

  • 首先,您不能使用foreach 循环为集合项生成表单控件(请参阅this answer 以获得解释)。但是你做的其他很多事情都没有任何意义。并且不要使用TempData,在你的get方法中,你初始化你的集合并将它传递给视图。

标签: c# asp.net-mvc


【解决方案1】:

TempData 不打算作为参数传递给您的 PartialView。即使您不将其作为参数传递;你仍然可以访问它。我建议您改为这样做:

return PartialView("CreateCourseHoles", getHoles());

那么你的局部视图你可以拥有

@model IEnumerable<BGSociety.Models.CreateCourseHolesViewModel>

并将所有 for 循环包装在一个表单中:

 <form method="post" action="wherever you want to post it to">

foreach (var hole in Model)
    {
        <div class="row">
            <div class="col-sm-1">
                <p>@hole.holeNumber</p>
            </div>
            <div class="col-sm-6">
                <div class="form-group">
                    <div class="col-xs-12">
                        @Html.ValidationMessageFor(m => hole.par)
                        @Html.TextBox("par", TempData["par"], new { @class = "form-control", placeholder = "Par", name = "Par" })
                    </div>
                </div> 
            </div>
        </div>
    }

</form>

【讨论】:

  • 为那个萌芽干杯,但我仍然看不到模型中的 18 组数据,我只能看到第一个。当它被发布回控制器时,我的意思是
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-31
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 2011-09-10
  • 1970-01-01
相关资源
最近更新 更多