未在回发上接收多个部分视图数据

时间:2016-11-28 12:50:09

标签: asp.net-mvc-4 asp.net-mvc-partialview

请帮助您解决以下问题。 我有一个主视图和局部视图。在主视图中,基于模型的计数循环,将呈现部分视图。部分视图如下所示

----------------- Partial View ----------------------

@using (Html.BeginCollectionItem("books"))
{
    <div id="bookRow" class="bookRow">
        <div class='container'>
            <div class="align-left">
                <h1>Book Name</h1>
                <h2>@Html.TextBoxFor(m => m.BookName)</h2>
            </div>
            <div class="align-right">
                <h1>Author</h1>
                <h2>@Html.TextBoxFor(m => m.Author)</h2>
            </div>
            <div class="align-right">
                <h1>Publisher</h1>
                <h2>@Html.TextBoxFor(m => m.Publisher)</h2>
            </div>
            <div class="align-right">
                @Html.CheckBoxFor(model => model.isConfirm)
                @Html.Hidden("Id", @Model.Id)
            </div>
            <a href="#" class="deleteRow">Delete</a>
        </div>
     </div>
}

-------------------主视图----------------------

@model IEnumerable<TDLProject.Models.BookViewModel>

<fieldset>
    <legend>Books</legend>

    <div id="new-Book">
        @foreach (var model in Model)
        {
            @Html.Partial("_DynamicPartialView", model)
        }
    </div>

    <div>
        <input type="button" id="addBook" name="addBook" value="Add Book" />
        <br />
    </div>
    <br />
</fieldset>

@using (Html.BeginForm())
{
    <div>
        <input type="submit" id="submitButton" value="Submit" />
    </div>
}

-------------控制器--------------

[HttpPost]
        public ActionResult Contact(IEnumerable<BookViewModel> bookModel)
        {
            // To do: do whatever you want with the data
            return View();
        }

问题是我没有在点击提交按钮时收到从View发布到Controller的数据。我在主视图上有多个相同模型的部分视图,当点击提交按钮时,我需要将所有部分视图数据发布到控制器。在部分视图中我使用BeginCollectionItem。请帮助你。

1 个答案:

答案 0 :(得分:0)

表单只回发其成功控件的名称/值对,而不会在<form>标记内生成表单控件。

更改代码,将@Html.Partial()代码移到<form>(简化)

@model IEnumerable<TDLProject.Models.BookViewModel>
@using (Html.BeginForm())
{
    @foreach (var model in Model)
    {
        @Html.Partial("_DynamicPartialView", model)
    }
    <input type="button" id="addBook" name="addBook" value="Add Book" />
    <input type="submit" id="submitButton" value="Submit" />
}

您还需要将POST方法签名更改为

public ActionResult Contact(IEnumerable<BookViewModel> books)

匹配您在@using (Html.BeginCollectionItem("books"))方法中使用的名称。