gpt4 book ai didi

Ajax.BeginForm 在下拉列表更改时替换整个页面

转载 作者:行者123 更新时间:2023-12-02 18:33:27 28 4
gpt4 key购买 nike

目的

我有一个简单的表格,列出了名称(在部分 View 中),其上方有一个包含这些名称的下拉列表。目的是根据下拉列表中选择的名称过滤表。一旦下拉列表中的选定值发生变化,过滤就应该发生,并且应该只再次渲染部分 View 。

问题

当我在下拉列表中选择一个值时,部分 View 不会在其他 View 中呈现,而是显示为整个页面。但是,当我在 Ajax.BeginForm block 中包含提交按钮并触发提交按钮上的操作时,它确实按预期运行...

代码

Controller

public PartialViewResult Filter(string filterName) {
var names = from p in db.People
select p;

if (!String.IsNullOrEmpty(filterName))
{
names = names.Where(p => p.Name.Equals(filterName));
}

return PartialView("_PersonsTable", names);
}

查看

@model IEnumerable<Sandbox.Models.Person>

<h2>Index</h2>

<p>
@Html.ActionLink("Create New", "Create")
</p>

@using (Ajax.BeginForm("Filter", "Person", new AjaxOptions {
HttpMethod = "Get", UpdateTargetId = "SearchResults", InsertionMode = System.Web.Mvc.Ajax.InsertionMode.Replace }))
{
@Html.DropDownList("filterName", new SelectList(ViewBag.Names), "Select a name", new { onchange = "this.form.submit()" })
}

@Html.Partial("_PersonsTable")

部分 View

@model IEnumerable<Sandbox.Models.Person>

<table id="SearchResults">
<tr>
<th>
Name
</th>
<th>
Age
</th>
<th></th>
</tr>

@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Age)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>
}
</table>

那么为什么我的 searchResults 表没有呈现为部分 View ?

我的 _Layout View 中包含这些脚本:

<script src="/Scripts/jquery-1.7.2.js" type="text/javascript"></script>
<script src="/Scripts/modernizr-1.7.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftAjax.debug.js" type="text/javascript"></script>
<script src="/Scripts/MicrosoftMvcAjax.debug.js" type="text/javascript"></script>

最佳答案

在下拉列表中替换:

new { onchange = "this.form.submit()" }

与:

new { onchange = "$(this.form).submit();" }

同时删除所有 MicrosoftAjax*.js 脚本。这些完全是遗留的,不应该在 ASP.NET MVC 3 和更新的应用程序中使用。如果您要从旧版本迁移,则仅出于兼容性原因提供它们。 jQuery.jsjquery.unobtrusive-ajax.js 就足够了。

关于Ajax.BeginForm 在下拉列表更改时替换整个页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10566923/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com