Asp.net mvc 4 MVC4:是否将子部分视图值发送到控制器?

Asp.net mvc 4 MVC4:是否将子部分视图值发送到控制器?,asp.net-mvc-4,partial-views,Asp.net Mvc 4,Partial Views,首先,我必须说,我是MVC4新手,开发此应用程序并同时学习MVC4: 在这个应用程序中, 下面是父视图,其中渲染了3个局部视图,还有一个按钮: [code] <td id="track">@Html.Partial("_Track",Model)</td><br> <td id="tech"> <div id="Technologies"> @Html.Partial("_Technology",Model) </div>

首先,我必须说,我是MVC4新手,开发此应用程序并同时学习MVC4:

在这个应用程序中, 下面是父视图,其中渲染了3个局部视图,还有一个按钮:

[code]
 <td id="track">@Html.Partial("_Track",Model)</td><br>
<td id="tech">
 <div id="Technologies"> @Html.Partial("_Technology",Model)
</div></td></tr> 
..
[some code]
..

<td class="subtopic">
 <div class="subtopiclist" id="subque">@Html.Partial("_Subtopics",Model)</div><br>
 <input type="Submit" value="Fetch Interview Questions" name="Fetch" id="Fetch" />
           </td>
局部视图1它包含下拉列表:

@model MvcApplication3.Models.CommonWrapper

@using (Ajax.BeginForm("SelectTrack", "Home", new AjaxOptions { UpdateTargetId = "Technologies" }))
{ 
    @Html.DropDownListFor(
            m=>m.SelectedTrackId,
            new SelectList(Model.track, "TrackId", "TrackName"),
           string.Empty
        )
}
  <script type="text/javascript">
    $('#SelectedTrackId').change(function () {
        $(this).parents('form').submit();
    });
</script>
Parital View2它包含下拉列表:

@model MvcApplication3.Models.CommonWrapper
@if (Model.tech != null && Model.tech.Count() > 0)
{
    using (Ajax.BeginForm("SelectTechnology", "Home", new AjaxOptions { UpdateTargetId = "subque" }))
    { 
     @Html.HiddenFor(m => m.SelectedTrackId)
     @Html.DropDownListFor(
            m => m.SelectedTechId,
            new SelectList(Model.tech, "TechId", "TechName"),
            string.Empty
            )
    }
}

  <script type="text/javascript">
    $(document).on('change', '#SelectedTechId', function () {
        $(this).parents('form').submit();
    });

</script>
局部视图3它包含多个复选框:

@if (Model.subtopic != null && Model.subtopic.Count() > 0)
{
<table>
@for (int i = 0; i < Model.subtopic.Count; i++)
{
 <tr><td>
    @Html.CheckBoxFor(m => m.subtopic[i].IsSelected, new { id = "subTopic_" + i })
    @Html.HiddenFor(m => m.subtopic[i].SubtopicName)
    @Html.DisplayFor(m => m.subtopic[i].SubtopicName)
     <td>
     </tr>   
}
</table>

}
现在在父视图中,我想从这三个部分视图中获取值。另外,我需要将这些获取的值发送给控制器。 如何做到这一点?谁能帮我一下吗。 提前谢谢

添加控制器代码:

[HttpPost]
        public ActionResult SelectTrack(int? selectedTrackId)
        {
            CommonWrapper wrapper = new CommonWrapper();
            wrapper.tech = new List<TechModel>();

            if (selectedTrackId.HasValue)
            {
                wrapper.tech = (from s in CommonWrapper.GetTechnology()
                                where s.TrackId == selectedTrackId
                                orderby s.TechName
                                select s).ToList();
            }

            return PartialView("_Technology", wrapper);

        }

        [HttpPost]
        public ActionResult SelectTechnology(int? selectedTechId)
        {
            CommonWrapper wrapper = new CommonWrapper();
            wrapper.subtopic = new List<SubtopicsModel>();

            if (selectedTechId.HasValue)
            {
                wrapper.subtopic = (from s in CommonWrapper.GetSubtopics()
                                           where s.TechId == selectedTechId
                                           orderby s.SubtopicName
                                           select s).ToList();
            }

            return PartialView("_Subtopics", wrapper);

        }

我将创建一个ViewModel并将其放入[HttpPost]控制器操作中

希望这有帮助


Christian

尝试将ajax表单更改为仅使用jquery发布到所需的控制器操作。然后,这会将局部视图从需要更新目标中分离出来

您可以对调用不同控制器操作的每个下拉列表应用此方法

删除Ajax.BeginForm和相应的jquery代码,并用以下代码替换它们

父视图


这些都不是魔法,只是有些模糊。从简单地查看页面的输出HTML开始,您将看到表单和输入是如何构造的,就像一个带有许多字段的普通表单一样。一个问题是,当您可能希望父视图中有一个表单时,您正在局部视图上嵌套表单。当您为数组正确使用索引时,它的大部分将绑定到接收的模型。请显示您的控制器代码。嗨,TrueBlueAusie,我添加了控制器代码。如果您能分享一些虚拟代码片段,这将非常有帮助。非常感谢您的帮助David。我尝试使用第一种方法,它对我有效:
<script type="text/javascript">
    $(function ()
    {
        $("#SelectedTrackId").change(function ()
        {
            var selectedValue = $(this).val();
            $.ajax(
            {
                type: "post",
                data: selectedValue,
                url: url,
                success: function (data)
                {
                    // data contains your partial view
                    $("#some-container-id").html(data);
                }
            });
        });
    });
</script>