POST列表收集从视图到控制器MVC 4



在以下问题上搜索了很多。最后决定与你分享。我有一个模型。

 public class EarlyBirdWeb
    {
       public string  Client { get; set; }
       [Display(Name = "Job Name")]
       public string JobName { get; set; }
       public List<SelectListItem> Reasons { get; set; }
       public List<Status> status { get; set; }
       public List<ETA> etas { get; set; } 
       [Display(Name="Call BU")]
       public string CallBU { get; set; }
    }

我将这个模型绑定到MVC视图。我的观点如下。

@model List<EarlyBird.Models.EarlyBirdWeb>
<form method="post">
    @Html.AntiForgeryToken()  
    <div class="row">
        <table class="table table-bordered table-inverse">
            <tr class="bg-warning">
                <th>Client
                </th>
                <th>Job Name
                </th>
                <th>Reason</th>
                <th>Status</th>
                <th>ETA</th>
                <th>CallBU?
                </th>
            </tr>
            @foreach (var item in Model)
            {
                <tr>
                    <td>
                      @item.Client
                      @Html.Hidden(@item.Client)
                    </td>
                    <td>
                        @item.JobName
                    </td>
                    <td>
                        @Html.DropDownList("--Select One--", (IEnumerable<SelectListItem>)@item.Reasons)
                    </td>
                    <td>
                        <select>
                            @foreach (var status in item.status)
                            {
                                <option value="@status.StatusName">@status.StatusName</option>           
                            }
                        </select>
                    </td>
                    <td>
                        <select>
                            @foreach (var etas in item.etas)
                            {
                                <option value="@etas.ETATime">@etas.ETATime</option>           
                            }
                        </select>
                    </td>
                    <td>
                        @item.CallBU
                    </td>
                </tr>
            }
        </table>
    </div>
    <div class="row">
        <input type="submit" value="Submit" name="Submit" class="btn btn-warning" />
    </div>
</form>

现在,当我在视图中填写所有细节并单击提交按钮时,我在控制器中得到null

所以,请帮助我如何在控制器上得到我修改过的列表集合。

谢谢. .

下面的代码可以正常工作,参见下面的代码

Model:

public class EarlyBirdWeb
    {
       public string  Client { get; set; }
       [Display(Name = "Job Name")]
       public string JobName { get; set; }
       public List<SelectListItem> Reasons { get; set; }
       public List<Status> status { get; set; }
       public List<ETA> etas { get; set; } 
       [Display(Name="Call BU")]
       public string CallBU { get; set; }
    }
控制器

   [HttpPost]
   public ActionResult Sample(EarlyBirdWeb model)
        {
            if (ModelState.IsValid)
            {
                  // do your stuff like: save to database and redirect to required page.
            }
            // If we got this far, something failed, redisplay form
            return View(model);
        }
<<p> 视图/strong>
@model MvcForums.Models.EarlyBirdWeb
@{
    using (Html.BeginForm("Sample", "ControllerName", FormMethod.Post))
    {
        <label>Client</label>
        @Html.TextBoxFor(m => m.Client)
        <br/>
        <label>JobName</label>
        @Html.TextBoxFor(m => m.JobName)
        <input type="submit" value="btnSubmit" />
    }
}

尝试使用IEnumerable,并确保您的rcshtml文件不违反mvc约定(cshtml文件的名称与方法相同)

@model IEnumerable<EarlyBird.Models.EarlyBirdWeb>
     @using (Html.BeginForm())
                {
        @Html.AntiForgeryToken()  
        <div class="row">
            <table class="table table-bordered table-inverse">
                <tr class="bg-warning">
                    <th>Client
                    </th>
                    <th>Job Name
                    </th>
                    <th>Reason</th>
                    <th>Status</th>
                    <th>ETA</th>
                    <th>CallBU?
                    </th>
                </tr>
                @foreach (var item in Model)
                {
                    <tr>
                        <td>
                          @item.Client
                          @Html.Hidden(@item.Client)
                        </td>
                        <td>
                            @item.JobName
                        </td>
                        <td>
                            @Html.DropDownList("--Select One--", (IEnumerable<SelectListItem>)@item.Reasons)
                        </td>
                        <td>
                            <select>
                                @foreach (var status in item.status)
                                {
                                    <option value="@status.StatusName">@status.StatusName</option>           
                                }
                            </select>
                        </td>
                        <td>
                            <select>
                                @foreach (var etas in item.etas)
                                {
                                    <option value="@etas.ETATime">@etas.ETATime</option>           
                                }
                            </select>
                        </td>
                        <td>
                            @item.CallBU
                        </td>
                    </tr>
                }
            </table>
        </div>
        <div class="row">
            <input type="submit" value="Submit" name="Submit" class="btn btn-warning" />
        </div>
    }

最新更新