C# 重新加载视图不会更新窗体上的所有控件

C# 重新加载视图不会更新窗体上的所有控件,c#,asp.net-mvc,asp.net-mvc-4,razor,C#,Asp.net Mvc,Asp.net Mvc 4,Razor,我有一个包含@Html.DropDownListFor的视图。加载表单/视图时,如果其中一个模型属性具有值(IEnumerable),则它将使用相应的数据创建一组div。如果该属性没有任何值(aka Count()==0),那么它应该在表单上显示一个按钮(这将为该属性创建数据) 因此,当用户从下拉列表中选择一个选项时,我会对填充当前表单/视图的完全相同的操作方法发出ajax调用,但这一次,它会在id字段中发送一个值 我的操作方法中有一个断点,我验证了它是否被命中,它是否具有正确的参数值,并为传递

我有一个包含@Html.DropDownListFor的视图。加载表单/视图时,如果其中一个模型属性具有值(IEnumerable),则它将使用相应的数据创建一组div。如果该属性没有任何值(aka Count()==0),那么它应该在表单上显示一个按钮(这将为该属性创建数据)

因此,当用户从下拉列表中选择一个选项时,我会对填充当前表单/视图的完全相同的操作方法发出ajax调用,但这一次,它会在id字段中发送一个值

我的操作方法中有一个断点,我验证了它是否被命中,它是否具有正确的参数值,并为传递到视图的模型创建了正确的数据,但是…当模型被发送到视图以重新填充时,表单上的任何项/控件都不会更改。我甚至在cshtml文件中设置了断点,它也在那里使用正确的数据

这是我的控制器:

public ActionResult Index(int? id)
        {
            var seasonId = id;

            if (seasonId == null)
            {
                var player = _playerRepository.Query().FirstOrDefault(p => p.PlayerId == _userIdentity.PlayerId);

                if (player.DefaultSeasonId != null)
                    seasonId = (int)player.DefaultSeasonId;
                else
                {
                    return View(new ScheduleModel
                    {
                        Player = player,
                        AvailableSeasons = _seasonRepository.Query().Select(s => s)
                    });
                }
            }

            return View(CreateScheduleModelForSeason((int)seasonId));
        }
以下是我观点的开始:

@model LeagueManager.Models.ScheduleModel

@{
    ViewBag.Title = "Schedule(s)";
}

<div class="row">
    @Html.LabelFor(m => m.AvailableSeasons)
    @Html.DropDownListFor(m => m.SelectedSeasonId, new SelectList(Model.AvailableSeasons, "SeasonId", "SeasonName"), new { id = "seasonSelect" })
</div>

<form method="post" action="Schedule/GenerateSchedule">
    <h2>The Season's Schedules/Weeks and Matchups</h2>

    <div>
        <div>
            @if (Model.SchedulesAndMatches == null || (Model.SchedulesAndMatches != null && !Model.SchedulesAndMatches.Any()))
            {
                <input type="submit" class="btn btn-primary" value="Generate Schedule" />
            }
        </div>
同样,所有的实际代码都在工作,只是没有重新渲染视图

示例:当调用id为1的ActionResult方法时,它将加载整个计划。当通过下拉菜单切换到id=2时(然后通过ajax再次调用),它将保持相同的时间表

另一方面:当调用id=2的ActionResult方法时,它加载单个按钮。当通过下拉菜单切换到id=1时,它会在模型中重新填充正确的数据,但视图/表单不会反映新信息


请帮忙

当使用ajax调用操作时,不能返回视图,必须返回json数据。 因此,您的解决方案是删除ajax调用,并使用帖子url设置window.location

@* Season Selector *@
$('select#seasonSelect').change(function () {
    var selectedSeasonId = $(this).val();

    window.location = '/Schedule/Index/' + selectedSeasonId;        

});

你能进一步解释一下你到底需要什么吗?从下拉列表中选择选项时是否要更新下拉列表?太棒了!我想说我忘记了,但这只是我写的第三个ajax调用。现在工作完美了,谢谢!
@* Season Selector *@
$('select#seasonSelect').change(function () {
    var selectedSeasonId = $(this).val();

    window.location = '/Schedule/Index/' + selectedSeasonId;        

});