ICollection在提交时始终为空

时间:2019-11-20 11:13:24

标签: asp.net-mvc-5

我有该文件夹中“ .INX”类型的特定文件的列表。当用户单击“运行选定的对象”时,对于选定的文件,将对该文件执行某些操作,并在进度栏中显示操作的进度,因为每个操作将花费近8个小时以上。

但是,当单击“ 运行选定的”时,在ViewModel中, ScenarioList 的ICollection在提交表单时始终为空。我在这里提到了类似的问题,但没有一个有帮助。

这是代码。

数据模型

public class INX
{
    public int INXId { get; set; }
    [DisplayName("INX Path")]
    public string INXPath { get; set; }
    public bool Selected { get; set; }
}

查看模型

public class vmINX
{
    public ICollection<INX> ScenarioList { get; set; }
}

控制器

public class INXController : Controller
{
    // GET: INX
    [HttpGet]
    public ActionResult Index()
    {
        return View(GetFileList());
    }

    [HttpPost]
    public ActionResult Run([Bind(Include = "INX")]vmINX viewModel)
    {
        foreach (INX modelItem in viewModel.ScenarioList)
        {
            if (modelItem.Selected)
            {
                //Do Something for selected scenarion
            }
        }
        return View(viewModel);
    }

    public vmINX GetFileList()
    {
        ViewModel.vmINX model = new vmINX();
        model.ScenarioList = new List<INX>();

        //This is just a temporary implementation
        string[] fileList = Directory.GetFiles(@"<Network Folder Path>");
        int id = 1;
        foreach (string file in fileList)
        {
            INX item = new INX();
            if (file.Substring(file.Length - 3).ToLower() == "inx")
            {
                item.INXId = id;
                item.INXPath = file;
                model.ScenarioList.Add(item);
            }
            id++;
        }

        return model;
    }

查看

@model Ancon3.ViewModel.vmINX

@using (Html.BeginForm("Run", "INX", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    <table class="table">
        <tr>
            <th>
                INX Path
            </th>
            <th>Progress</th>
            <th></th>
        </tr>
        @foreach (var item in Model.ScenarioList)
        {

        string progressId = "progress" + item.INXId;
        string paragraphId = "progressBarPercentage" + item.INXId;
        string runId = "run" + item.INXId;

        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.INXPath)
            </td>
            <td>
                <div id="result" style="float:left;">

                    <div id="ProgressStripe" class="progress progress-striped active" style="position:relative; min-width:100px; float:left;">
                        <div id=@progressId class="progress-bar progress-bar-info" style="float:left;"></div>
                    </div>
                    <span id=@paragraphId style="float:left; min-width:45px;"></span>
                </div>
            </td>
            <td>@Html.CheckBoxFor(modelItem => item.Selected)</td>
        </tr>
    }
</table>
<div class="col-md-10">
    <input type="submit" value="Run selected" class="btn btn-default" />
</div>

}

在Run方法中,ScenarioList始终为null。我不确定自己在做什么错。任何帮助将不胜感激。

0 个答案:

没有答案