【问题标题】:Not Receiving Multiple Partial View data on Postback回发时未收到多个部分视图数据
【发布时间】:2016-11-28 12:50:08
【问题描述】:

请您对以下查询提供帮助。 我有一个主要视图和部分视图。在基于模型计数循环的主视图中,将渲染部分视图。部分视图如下所示

-----------------局部视图----------------------

@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();
        }

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

【问题讨论】:

  • 非常感谢斯蒂芬。工作正常。

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


【解决方案1】:

表单只回发其成功控件的名称/值对,您不会在&lt;form&gt; 标签内生成表单控件。

更改代码以将@Html.Partial() 代码移动到&lt;form&gt; 内(简体)

@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")) 方法中使用的名称。

【讨论】:

  • 嗨,斯蒂芬,我在部分视图中放置了两个剑道下拉菜单(级联),如下所示 @(Html.Kendo().DropDownListFor(model => model.ServerMakeId) .Name("servermake"+Model .Id.ToString()) .DataTextField(CommonConstants.Description) .DataValueField(CommonConstants.Id) .OptionLabel("Select Server Make") })) 。 Id ServerMakeId 是字符串,它正在变为空。
  • @VVR147493,您需要提出一个新问题并提供相关详细信息(但无论如何您都需要删除.Name("servermake"+Model.Id.ToString() - 切勿尝试覆盖name 属性
  • 谢谢斯蒂芬。当我在模型中添加一个占位符时,下拉列表中的数据正在进入控制器。但是当我在主视图和相同的多个部分视图中添加一个新项目时,部分视图中的下拉值不会进入控制器。
  • @VVR147493,我不是通灵者,不可能猜到你在做什么。您需要提出一个显示所有相关详细信息的新问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
  • 2017-01-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多