如何在控制器和视图之间传递列表并显示

3
我尝试从用户获取日期时间值并返回所选电影的放映。控制器将列表传递给视图,但 HTML 没有更改。
控制器:
public ActionResult GetScreenings()
            {
                return View();
            }
    [HttpPost]
    public ActionResult GetScreenings(string starteDateTime, string endDateTime, string movieTitle)
    {
        List<ScreeningDisplayDTO> screeningsList = new List<ScreeningDisplayDTO>();
        if (String.IsNullOrEmpty(movieTitle))
        {
            screeningsList = screeningDisplayService.GetScreeningByParametr(starteDateTime, endDateTime).ToList();
        }
        else
        {
            screeningsList = screeningDisplayService.GetScreeningByParametr(starteDateTime, endDateTime, movieTitle).ToList();

        }
        return View(screeningsList);

    }

View

 @if (Model != null && Model.Count() > 0)
                {
                    foreach (var screening in Model)
                    {
                        
                       <p class="offer-film-title">@screening.MovieTitle</p>
                    }
                }

Ajax

$.ajax({
        traditional: true,
        type: "POST",
        url: '@Url.Action("GetScreenings")',
        data: { 'starteDateTime': starteDateTime, 'endDateTime': endDateTime, 'movieTitle': movieTitle  },
        success: function () {
            window.location.href = data;
        }
    });

谢谢您的帮助。
1个回答

1
如果您想使用ajax来改变您的视图,您需要使用一个局部视图。
<div id="partialView">
    
    <partial name="_PartialView" />
        
    </div>

并从操作返回此部分视图并呈现:

  success: function (result) {
             $("#partialView").html(result);
        }

也许对您来说,使用提交按钮会更容易。

我有一个提交按钮。我必须在我的点击事件中添加**e.preventDefault();**,现在一切都好了。之前,在单击提交按钮后,控制器会导致GET操作而不是POST。我不知道为什么。 - Leito87
1
我建议你也使用stopImmediatePropagation() - $(document).on("click", "#submitBtn", function (e) { e.preventDefault(); e.stopImmediatePropagation(); } - Serge

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接