ASP.NET MVC - View正在发布null模型

时间:2017-12-03 16:11:38

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我一直试图从我的视图中调用POST操作。我看到POST方法参数始终为null。我做错了什么?

我的模特课:

public class Survey
{
    public int Id { get; set; }
    public int QuestionId { get; set; }
    public string QuestionText { get; set; }
    public int ResponseId { get; set; }
    public string ResponseText { get; set; }
    public string Comments { get; set; }
}

我的控制器方法:

[HttpPost]
    public ActionResult Publish(List<Survey> surveyToSave)
    {
        if (ModelState.IsValid)
        {
            return View("Index");
        }

        //Save logc 

        return View("Index");
    }

查看代码:

    @model List<Survey>
@using (Html.BeginForm("Publish","Home",FormMethod.Post))
{
    <div class="center-div">
        @foreach (var item in Model)
        {
                <div id=@item.QuestionId class="Question">
                    <table>
                        <tr>
                            <td>@item.QuestionText</td>
                        </tr>
                        <tr>
                            <td>
                              <div>
                                    <label>
                                        @Html.RadioButtonFor(m => m.Find(i => i.QuestionId == item.QuestionId).ResponseText, "Not sure")
                                        Not sure
                                    </label>
                                </div>

                                <div>
                                    <label>
                                        @Html.RadioButtonFor(m => m.Find(i => i.QuestionId == item.QuestionId).ResponseText, "Agree")
                                        Agree
                                    </label>
                                </div>
                            </td>
                        </tr>
                    </table>
                </div>
            }

        }
    </div>
    <div class="col-md-offset-2 col-md-10">
        <input type="submit"  value="Publish" class="btn btn-default" />
    </div>

}

模型中的大多数属性应该从视图中填充。想法是在UI中制作模型并在帖子中提交以保存。

1 个答案:

答案 0 :(得分:2)

您当前的视图代码正在为集合中的所有项目生成这样的输入元素。

<input id="ResponseText" name="ResponseText" type="radio" value="Not sure" />

当属性结构/名称与发布到方法匹配的表单数据匹配时,模型绑定将起作用。默认模型绑定器将查看已发布表单数据中每个项目的名称属性值,并尝试在您用作方法参数的类对象中查找匹配属性并映射值。由于您的HttpPost操作方法参数为List<Survey>,因此要使模型绑定起作用,您的输入元素名称应该是这样的东西

 <input name="[n].ResponseText" type="radio" value="Not sure" />

n是索引的位置,从0Model.Count-1

您可以转换视图代码以使用for循环并创建具有name属性值

以上的输入元素
@model List<Survey>
@using (Html.BeginForm("Publish", "Home", FormMethod.Post))
{
   <div class="center-div">
        @for (var i = 0; i < Model.Count; i++)
        {
          <div>
            <label>@Model[i].QuestionText</label>
            <label>@Html.RadioButtonFor(m => Model[i].ResponseText, "Not sure")No</label>
            <label>@Html.RadioButtonFor(m => Model[i].ResponseText, "Agree")Agree </label>
          </div>
          @Html.HiddenFor(a => Model[i].QuestionId)
        }
   </div>
   <input type="submit" value="Publish" class="btn btn-default" />
}