簡體   English   中英

從視圖傳遞到控制器時,列表返回null

[英]List returns null when passing from view to controller

我的Controller有一個ActionResult ,可使用存儲過程從數據庫檢索數據。

RIROController.cs

public ActionResult myRIRO()
{
    // Calls the main ViewModel
    var vm = new ResourceViewModel();

    string EID = Session["EID"].ToString();


    vm.CheckValues = db_RIRO.sp_GetAllCheckStatus()
    .Select(a => new SelectListItem
    {
        Value = a.CheckID.ToString(),
        Text = a.CheckStatus
    })
    .ToList();

    // Calls the dictionary RIROList is nested inside ResourceViewModel 
    vm.UserRIList = new List<RIROFormViewModel>();
            // Set current user's value of completion status to ddl
    sp_GetUserRIForm_Result RIUserChkValue = db_RIRO.sp_GetUserRIForm(EID).FirstOrDefault();
    sp_GetUserROForm_Result ROUserChkValue = db_RIRO.sp_GetUserROForm(EID).FirstOrDefault();

    vm.RICheckID = RIUserChkValue.CheckID;
    vm.ROCheckID = ROUserChkValue.CheckID;

    foreach (var item in db_RIRO.sp_GetUserRIForm(Session["EID"].ToString()))
    {
        vm.UserRIList.Add(new RIROFormViewModel()
        {
            ItemNo = item.ItemNo,
            CheckItem = item.CheckItem,
            EmployeeTypeID = item.EmployeeTypeID,
            ItemID = item.ItemID,
            CheckID = item.CheckID,
            DateCompleted = item.DateCompleted,
            RIComment = item.Comments

        });
    }
   return View(vm);
}

查看/ myRIRO.cshtml

@model OnlineRIRO.ViewModel.ResourceViewModel

@using (Html.BeginForm("UpdateRIROForm", "RIRO", FormMethod.Post, new { @class = "form-horizontal" }))
{
    @foreach (var item in Model.UserRIList)
    {
        <tr>
            <td>@item.ItemNo</td>
            <td>@Html.Raw(item.CheckItem)</td>
            <td>
                @Html.DropDownListFor(a => a.RICheckID, Model.CheckValues, new { @class = "form-control input-sm" })
            </td>
            <td>
                @Html.TextBoxFor(a => item.RIComment, new { @class = "form-control input-sm" })
            </td>
        </tr>
    }
}

我想在vm.UserRIList檢索數據,並對該集合中的每個項目執行存儲過程。

UpdateRIROForm

[HttpPost]
public ActionResult UpdateRIROForm(ResourceViewModel riroInfo)
{
    var EID = Session["EID"].ToString();

    if (ModelState.IsValid)
    {
        try
        {
            foreach (var item in riroInfo.UserRIList)
            {
              db_RIRO.sp_UpdateUserRIRODraft(EID, item.ItemID, item.CheckID, item.RIComment)
              db_RIRO.SaveChanges();
            }

            return RedirectToAction("myRIRO");
        }
        catch
        {
            return RedirectToAction("myRIRO");
        }
    }
    else
    {
        TempData["Fail"] = 1;
        return RedirectToAction("myRIRO");
    }

}

當我調試UpdateRIROFormriroInfo.UserRIList為null。 我的代碼中缺少什么嗎?

在視圖中使用帶索引的for循環

@model OnlineRIRO.ViewModel.ResourceViewModel

@using (Html.BeginForm("UpdateRIROForm", "RIRO", FormMethod.Post, new { @class = "form-horizontal" })) {
    @for(int index = 0, index < Model.UserRIList.Count, index++) {
        <tr>
            <td>@Model.UserRIList[index].ItemNo</td>
            <td>@Html.Raw(Model.UserRIList[index].CheckItem)</td>
            <td>
                @Html.DropDownListFor(model => model.RICheckID, Model.CheckValues, new { @class = "form-control input-sm" })
            </td>
            <td>
                @Html.TextBoxFor(model => model.UserRIList[index].RIComment, new { @class = "form-control input-sm" })
            </td>
        </tr>
    }
}

當表單回發給控制器時,這將允許填充模型中的集合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM